SORU
30 Ocak 2009, Cuma


Nasıl bir IEnumerable<T> ilk unsuru alabilirim .net?

Ben sık sık IEnumerable<T> ilk öğe kapmak istiyor .net, ve bunu yapmak için iyi bir yol bulamadım. Buldum en iyisidir:

foreach(Elem e in enumerable) {
  // do something with e
  break;
}

Yuck! Bunu yapmak için iyi bir yol var mı?

CEVAP
30 Ocak 2009, Cuma


Eğer ETMENİZ kullanabilirsiniz kullanabilirsiniz:

var e = enumerable.First();

Bu ise sayısız boş ise bir istisna olsa atar: kullanabilirsiniz:

var e = enumerable.FirstOrDefault();

FirstOrDefault() türleri veya varsayılan 'sıfır değeri' value tipleri için. null edilecek olursa, sayısız boş ise default(T) döndürecektir

Eğer sen bir insan değilsin SERİ, daha sonra yaklaşımın teknik olarak doğru ve farklı daha yaratıcı bir numaralandırma kullanarak GetEnumerator MoveNext yöntemleri almak için ilk sonuç (bu örnek varsayar sayısız bir IEnumerable<Elem>):

Elem e = myDefault;
using (IEnumerator<Elem> enumer = enumerable.GetEnumerator()) {
    if (enumer.MoveNext()) e = enumer.Current;
}

Joel Coehoorn söz .Single() açıklamalarda; bu da iş, Eğer seni bekliyorlar senin sayısız içerir tam olarak bir öğe - ancak atar bir istisna ise, ya boş ya da daha büyük bir eleman. FirstOrDefault() benzer bir şekilde bu senaryo kapsayan SingleOrDefault() karşılık gelen bir yöntem yoktur. Ancak, David B SingleOrDefault() hala sayısız daha bir madde daha bulunduğu durumda bir özel durum olduğunu açıklıyor.

Edit: Teşekkürler Marc Gravell işaret ihtiyacım elden benim IEnumerator nesne kullandıktan sonra bunu aldım düzenlenmiş olmayan bir SERİ örnek ekran using anahtar kelime uygulamak için bu desen.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • George McCarron

    George McCar

    29 Mayıs 2013
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011