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ş:
Neden yok C# derleyici boş çeteleler i...
Neden belirli Unicode karakterler içer...
İzin heroku kodu dağıtırken (açık anah...
't neden C# Statik Yöntemler bir ...
Neden't statik Java yöntemleri ge...