Heim >Backend-Entwicklung >C++ >Wie kann ich eine Liste abgeleiteter Klassen in eine Liste von Basisklassen in C#konvertieren?

Wie kann ich eine Liste abgeleiteter Klassen in eine Liste von Basisklassen in C#konvertieren?

DDD
DDDOriginal
2025-02-01 18:01:08704Durchsuche

How Can I Convert a List of Derived Classes to a List of Base Classes in C#?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn