Domanda

So che C # supporta la covarianza in array come questo:

object[] array = new string[3];

Ma ricevo un errore quando tenta di compilare il codice seguente

class Dummy<K,T> where T:K
{
    public void foo()
    {
        K[] arr = new T[4];
    }
}

Dice " Impossibile convertire implicitamente il tipo 'T []' in 'K []' "

Perché visualizzo questo errore ???

È stato utile?

Soluzione

Devi specificare che sia T che K sono tipi di riferimento. La covarianza dell'array funziona solo con tipi di riferimento. Modificare la dichiarazione in:

class Dummy<K,T> where T : class, K

e funziona benissimo. Non è necessario specificare che K è un tipo di riferimento, perché se T è un tipo di riferimento e deriva o implementa K, anche K deve essere un tipo di riferimento. (Almeno presumo che sia il ragionamento. Non fa male aggiungere dove K: class anche per chiarezza.)

Altri suggerimenti

il tipo T deve supportare la conversione implicita in K.E.g.

T a = new T (); K b = a;

deve essere valido.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top