Array in C# è co-variante implicitamente sul tipo di riferimento:Perché C# si comporta diversamente su due array di int sintassi
object[] listString = new string[] { "string1", "string2" };
Ma non sul tipo di valore, quindi se si cambia string
a int
, si otterrà errore di compilazione:
object[] listInt = new int[] {0, 1}; // compile error
Ora, la preoccupazione è quando si dichiara int
serie come due sintassi di sotto del quale non dichiarano esplicitamente il tipo int
, basta solo differenziarsi sul new[]
, compilatore tratterà in modo diverso:
object[] list1 = { 0, 1 }; //compile successfully
object[] list2 = new[] {0, 1}; //compile error
Otterrete object[] list1 = { 0, 1 };
compilato con successo, ma object[] list2= new[] {0, 1};
errore compilato.
Sembra che il compilatore C# tratta
object[] list1 = { 0, 1 };
come
object[] list1 = new object[]{ 0, 1 };
ma
object[] list2 = new[] { 0, 1 };
come
object[] list2 = new int[]{ 0, 1 }; //error because of co-variant
Perché il compilatore C# si comporta in modo diverso in questo caso?
+1, vieni da [questa domanda] (http://stackoverflow.com/q/16456507/961113) – Habib
@Habib: sì, ispirato da esso –
Indovina rapidamente, tutti i tipi di riferimento accettano lo stesso numero di byte per il riferimento quindi, la sua conversione facile a implicita. – Jodrell