Frage Generische Methode und Konvertierung: Wie definiert man, dass Typ 1 in Typ 2 konvertierbar ist


Ich habe diese Methode definiert:

public static List<T2> ConvertList<T1, T2>(List<T1> param) where T1:class where T2:class
{
    List<T2> result = new List<T2>();

    foreach (T1 p in param)
        result.Add((T2)p);

    return result;
}

Um Listen vom Typ 1 in Listen vom Typ 2 umzuwandeln.

Leider habe ich vergessen, dass der C # -Compiler das zu diesem Zeitpunkt noch nicht sagen kann T1 ist umwandelbar in T2, so dass es einen Fehler auslöst:

Fehler CS0030: Typ T1 kann nicht in T2 konvertiert werden

Kann mir jemand sagen, wie man es richtig macht? Ich brauche diese Methode vorerst nur, um die Liste der benutzerdefinierten Klassen in die Liste zu konvertieren object, wie in .NET alles herkommt object es sollte funktionieren.

Grundsätzlich, was ich erwarten würde, ist eine Syntax, um Compiler zu sagen, dass T2 (object) ist Basis für T1 (MyClass), so etwas wie:

public static List<T2> ConvertList<T1, T2>(List<T1> param) where T2: base of T1

(... wo T2: Basis von T1)


7
2018-02-13 14:15


Ursprung


Antworten:


Sie könnten es in einem generischen Parameter angeben:

public static List<T2> ConvertList<T1, T2>(List<T1> param) 
                 where T1:class,T2 
                 where T2:class
{
    List<T2> result = new List<T2>();

    foreach (T1 p in param)
        result.Add((T2)p);

    return result;
}

8
2018-02-13 14:18