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

  • HouseholdHacker

    HouseholdHac

    6 Kasım 2007
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • MrDevin521

    MrDevin521

    18 Temmuz 2010