Heim > Backend-Entwicklung > C++ > Wie kann ich eine Liste in C# sicher in eine Liste umwandeln?

Wie kann ich eine Liste in C# sicher in eine Liste umwandeln?

Susan Sarandon
Freigeben: 2025-01-09 22:36:42
Original
338 Leute haben es durchsucht

How Can I Safely Cast a List to List in C#?

Liste in Liste konvertieren

in C#

Bei der Vererbung ist es manchmal notwendig, eine Liste abgeleiteter Klassenobjekte in eine Liste von Basisklassenobjekten umzuwandeln. Dies kann jedoch bei unsachgemäßer Handhabung zu Fehlern führen.

Fehler bei der Listenkonvertierung mit beschreibbaren Daten

Bedenken Sie den folgenden Code:

<code class="language-c#">using System;
using System.Collections.Generic;

class Animal
{
    public virtual void Play(List<Animal> animal) { }
}

class Cat : Animal
{
    public override void Play(List<Animal> animal) { }
}

class Program
{
    static void Main(string[] args)
    {
        Cat cat = new Cat();
        cat.Play(new List<Cat>());
    }
}</code>
Nach dem Login kopieren

Dieser Code generiert einen Kompilierungsfehler aufgrund einer Nichtübereinstimmung der Listenobjekttypen. Animal erwartet eine Liste seines eigenen Typs (Animal), diese Methode wird jedoch mit einer Liste von Cat-Objekten aufgerufen.

Fehlergrund

Dieser Fehler tritt auf, weil die Liste beschreibbar ist. Wenn die Konvertierung zulässig ist, kann es zu Problemen bei der Datenmanipulation kommen. Beispielsweise könnte ein Hundeobjekt zu einer Katzenliste hinzugefügt werden, was gegen die Typensicherheit verstoßen würde.

Generische Kovarianz

In C# 4 wurde eine Funktion namens generische Kovarianz eingeführt. Dadurch kann eine Liste abgeleiteter Klassen in eine Liste von Basisklassen konvertiert werden, sofern diese Typen die Typsicherheit gewährleisten. Ein Beispiel für einen sicheren Typ für generische Kovarianz ist IEnumerable<T>, der eine Folge von Objekten darstellt, in die jedoch nicht geschrieben werden kann.

Implementierung generischer Kovarianz

Um generische Kovarianz zu implementieren, können Sie die Methodensignatur in der Basisklasse ändern, um IEnumerable<T> als Parametertyp zu verwenden, etwa so:

<code class="language-c#">class Animal
{
    public virtual void Play(IEnumerable<Animal> animals) { }
}

class Cat : Animal
{
    public override void Play(IEnumerable<Animal> animals) { }
}

class Program
{
    static void Main()
    {
        Cat cat = new Cat();
    cat.Play(new List<Cat>());
    }
}</code>
Nach dem Login kopieren

In diesem Beispiel verwendet die Play-Methode in Animal IEnumerable<Animal> als Parameter, der es ihr ermöglicht, eine Sequenz von Animal- und Cat-Objekten zu akzeptieren.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste in C# sicher in eine Liste umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage