C# · Avançado · Português · Técnico
covariância de arrays
Em C#, arrays de um tipo de referência derivado podem ser atribuídos a arrays do tipo base (string[] para object[]). A checagem só ocorre ao gravar, em runtime.
Onde usar
Aparece como pegadinha em entrevistas e em bugs de ArrayTypeMismatchException. A covariância é insegura nos arrays por razões históricas; coleções genéricas como List<T> são invariantes, e IEnumerable<T> é covariante com segurança.
Em código
string[] textos = { "a", "b" };
object[] objs = textos; // compila
try { objs[0] = 42; } // grava int
catch (ArrayTypeMismatchException)
{ Console.WriteLine("falhou em runtime"); }Exemplos
A covariância de arrays deixa atribuir string[] a object[], mas pode estourar ao gravar.
Prefira List<T>, que é invariante, para evitar essa pegadinha.
Cuidado
Não confunda com a covariância de interfaces genéricas, que é verificada em compilação e não permite escrita.
Antônimos
invariância