Covarianza de matriz C # en clases genéricas
-
20-08-2019 - |
Pregunta
Sé que C # admite la covarianza en matrices como esta:
object[] array = new string[3];
Pero recibo un error cuando intenta compilar el siguiente código
class Dummy<K,T> where T:K
{
public void foo()
{
K[] arr = new T[4];
}
}
Dice " No se puede convertir implícitamente el tipo 'T []' a 'K []' "
¿Por qué recibo este error?
Solución
Debe especificar que tanto T como K son tipos de referencia. La covarianza de matriz solo funciona con tipos de referencia. Cambie la declaración a:
class Dummy<K,T> where T : class, K
y funciona bien. No tiene que especificar que K es un tipo de referencia, porque si T es un tipo de referencia y deriva de K o lo implementa, entonces K también debe ser un tipo de referencia. (Al menos supongo que ese es el razonamiento. No hace daño agregar donde K: class
también para mayor claridad).
Otros consejos
el tipo T debe admitir la conversión implícita a K.Eg.
T a = nuevo T (); K b = a;
tiene que ser válido.