Tableau en C# est co-variante implicitement sur le type de référence:
object[] listString = new string[] { "string1", "string2" };
Mais pas sur le type de la valeur, donc si vous changez string
de int
, vous aurez compilé erreur:
object[] listInt = new int[] {0, 1}; // compile error
Maintenant, le souci est lorsque vous déclarez int
tableau comme deux syntaxes ci-dessous qui ne sont pas de déclarer explicitement le type d' int
, juste de se différencier sur new[]
, le compilateur va traiter différemment:
object[] list1 = { 0, 1 }; //compile successfully
object[] list2 = new[] {0, 1}; //compile error
Vous obtiendrez object[] list1 = { 0, 1 };
compilé, mais object[] list2= new[] {0, 1};
compilé erreur.
Il semble que le compilateur C# traite
object[] list1 = { 0, 1 };
comme
object[] list1 = new object[]{ 0, 1 };
mais
object[] list2 = new[] { 0, 1 };
comme
object[] list2 = new int[]{ 0, 1 }; //error because of co-variant
Pourquoi le compilateur C# se comporte de la manière différente sur cette affaire?