Bir int içersinde bir IComparable atayabilirim. Ayrıca bir IEnumerable'a bir liste veya dizi atayabilirim.Öğe <int> IEnumerable için <IComparable>
Neden bir listeyi bir IEnumerable'a dolaylı olarak veremiyorum?
Bunu .net framework 4.5 ve Visual Studio 2012 Ultimate ile test ettim. testine
Kodu:
IComparable test1;
int t1 = 5;
test1 = t1; //OK
IEnumerable<int> test2;
List<int> t2 = new List<int>();
int[] t3 = new int[] { 5, 6 };
test2 = t2; //OK
test2 = t3; //OK
TabAlignment[] test;
IEnumerable<IComparable> test3;
test3 = t2; //error Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'System.Collections.Generic.IEnumerable<System.IComparable>'. An explicit conversion exists (are you missing a cast?)
yapabileceğini Cevabınız okuyun ve karşılaştırılmıştır benimkiyle (ve sonra test eden kodunda), List -> List'ten çok, List -> IEnumerable gibi dönüşümlerle uğraşırken, bu örnekte yanlış olanın farkına varıyorum, ancak bunun neden fark yarattığına şaşıyorum. Açıklayabilir misin? –
@JonEgerton: Bu yoruma genel tür argümanları koyduğunuzu sanıyorum, ancak onları göremiyorum. Kodla ilgili bitlerin etrafındaki backticks ile tekrar deneyin. –
@JonEgerton: Tamam, cevabınızı okuyorsunuz, sonra tekrar yorumunuz ... - çünkü "List", "T" kodunda eşdeğer değil, ancak IEnuemrable '(.NET 4'ten itibaren). Sınıflar asla değişken olamaz. Daha fazla bilgi için MSDN'de "genel varyans" ara :) –