Heim >Backend-Entwicklung >C++ >Wie kann ich eine Liste abgeleiteter Klassen in eine Liste von Basisklassen in C#konvertieren?
Konvertieren einer Liste abgeleiteter Klassen in eine Liste von Basisklassen in C#
Vererbung in C# ermöglicht das Erstellen abgeleiteter Klassen aus Basisklassen oder Schnittstellen. Es ist jedoch nicht zulässig, ein List
einer abgeleiteten Klasse zu einer List
seiner Basisklasse zuzuweisen. Diese Einschränkung ergibt sich aus der Strenge des Typsystems in Bezug auf generische Typparameter.
Betrachten Sie dieses Beispiel:
<code class="language-csharp">interface IA {} class B : IA {} class C : B {} class Test { static void Main(string[] args) { IA a = new C(); // This is valid List<IA> listOfIA = new List<C>(); // Compiler error } }</code>
Um dies zu überwinden, können wir zwei primäre Methoden anwenden:
Methode 1: Verwenden Sie ConvertAll
Dieser Ansatz durch die Liste der abgeleiteten Klassen durchläuft und jedes Element ausdrücklich auf den Basisklassentyp verletzt.
<code class="language-csharp">List<C> listOfC = new List<C>(); // Your list of derived classes List<IA> listOfIA = listOfC.ConvertAll(x => (IA)x);</code>
Methode 2: Verwenden von Linqs Cast
lINQ liefert eine prägnantere Lösung unter Verwendung der Cast<T>
-Methode. Diese Methode führt den gleichen Typumwandlungen wie ConvertAll
durch, jedoch mit einer optimierteren Syntax.
<code class="language-csharp">List<C> listOfC = new List<C>(); // Your list of derived classes List<IA> listOfIA = listOfC.Cast<IA>().ToList();</code>
Beide Methoden erzielen das gleiche Ergebnis: Eine neue Liste, die die Objekte aus der ursprünglichen Liste enthält, jedoch mit dem Basisklassentyp. Der LINQ -Ansatz (Cast<T>
) wird im Allgemeinen für seine Lesbarkeit und SUPISSINY bevorzugt. Denken Sie daran, potenzielle Ausnahmen zu bewältigen, wenn der Guss möglicherweise fehlschlägt (z. B. wenn die Liste Elemente enthält, die nicht tatsächlich aus der Basisklasse abgeleitet sind).
Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste abgeleiteter Klassen in eine Liste von Basisklassen in C#konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!