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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top