SORU
8 ŞUBAT 2012, ÇARŞAMBA


Neden yok C# derleyici IEnumerable<T> ve TAlmostAnything arasında açık bir tonunu izin?

Aşağıdaki kod beklediğiniz gibi bir derleyici hata verir:

List<Banana> aBunchOfBananas = new List<Banana>();

Banana justOneBanana = (Banana)aBunchOfBananas;

IEnumerable<Banana>, kullanırken ancak, sadece bir çalışma zamanı hatası alıyorum.

IEnumerable<Banana> aBunchOfBananas = new List<Banana>();

Banana justOneBanana = (Banana)aBunchOfBananas;

Neden yok C# derleyici buna izin mi veriyor?

CEVAP
8 ŞUBAT 2012, ÇARŞAMBA


Bazı uygulama nerede IEnumerable<T> bir arabirim olduğu için sanırımolabilirBanana - ne olursa olsun açık bir döküm var.

Diğer taraftan, derleyici List<T> açıkça Banana bir atama olamayacağını bilir.

Örnekler güzel seçim!

Açıklamak için bir örnek ekliyorum.Belki biraz "" o her zaman içermelidir . sayısız olurdu ^strong>en fazlatek Banana: bir

public class SingleItemList<T>:Banana, IEnumerable<T> where T:Banana {
    public static explicit operator T(SingleItemList<T> enumerable) {
        return enumerable.SingleOrDefault();
    }

    // Others omitted...
}

Sana o zamanolabiliraslında bunu yapmak için:

IEnumerable<Banana> aBunchOfBananas = new SingleItemList<Banana>();
Banana justOneBanana = (Banana)aBunchOfBananas;

Derleyici ile gayet mutlu olan aşağıdaki yazılı olarak aynı şey gibi:

Banana justOneBanana = aBunchOfBananas.SingleOrDefault();

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • mist64

    mist64

    30 Mayıs 2006
  • sebsebdouze

    sebsebdouze

    7 ŞUBAT 2008
  • Tire Rack

    Tire Rack

    31 Mayıs 2007