Frage

Ich weiß, dass C # Kovarianz in Arrays wie folgt unterstützt:

object[] array = new string[3];

Aber ich bin immer einen Fehler, wenn es versucht, den folgenden Code zu kompilieren

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

Er sagt: "Kann nicht implizit Typ 'T []' auf 'K []' convert"

Warum erhalte ich diesen Fehler ???

War es hilfreich?

Lösung

Sie müssen angeben, dass sowohl T und K Referenztypen sind. Matrixkovarianz funktioniert nur mit Referenztypen. Ändern Sie die Deklaration:

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

und es funktioniert gut. Sie müssen nicht angeben, dass K ein Referenztyp ist, denn wenn T ein Verweistyp ist, und es ergibt sich aus oder K implementiert, dann K auch einen Referenztyp sein muss. (Zumindest gehe ich davon aus, das ist die Begründung. Es ist nicht where K : class auch für Klarheit hinzufügen schadet.)

Andere Tipps

Typ T hat implizite Konvertierung in K. Z. B zu unterstützen.

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

muss gültig sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top