Heim > Backend-Entwicklung > C++ > Warum kann ich einer Liste in C#keine Liste zuweisen?

Warum kann ich einer Liste in C#keine Liste zuweisen?

Susan Sarandon
Freigeben: 2025-02-01 17:51:12
Original
707 Leute haben es durchsucht

Why Can't I Assign a List to a List in C#?

c# In der Objekt -orientierten Programmierung ist die abgeleitete Klassenvererbung sehr häufig. Bei der Verarbeitung des Satzes (z. B. einer Liste) ist es jedoch nicht möglich, dieselbe Basisklasse zu verwenden, um sie zu deklarieren, was möglicherweise verwirrend ist.

Betrachten Sie den folgenden Code:

Dieser Code führt zu Kompilierungsfehlern, wenn versucht wird,
<code class="language-csharp">interface A { }

class B : A { }

class C : B { }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // 正确
        List<A> listOfA = new List<C>(); // 编译错误
    }
}</code>
Nach dem Login kopieren

zu verwenden. Obwohl die Instanz der abgeleiteten Klasse C der Basisklassenvariable A zugeordnet werden kann, ist die Sammlung nicht gut. List<C> List<A> Der Grund für diese Grenze liegt in der Methode der C# Initialisierungsliste. Beim Erstellen von generiert C# die interne Datenstruktur der Liste beim Ausführen, und es wird erwartet, dass der Speichertyp ein Objekt von A ist. Da C jedoch eine Derivatklasse von A ist, hat sein Objekt zusätzliche Mitglieder und nimmt mehr Speicher als ein Objekt ein. Die Zuweisung von mit

wird daher die Speicheradresse verprügelt, was Speicherfehler verursachen kann.

List<A> Um dieses Problem zu lösen und List<C> als List<A> zu ändern, können Sie die folgenden Methoden verwenden:

<.> 1. Ausdrücke Konvertierung: List<派生类> List<基类>

durchqueren die Liste und konvertiert jedes Element explizit in eine Basisklasse:

<.> 2. Linq:

Verwenden Sie LINQ, um das Element wie folgt zu konvertieren:
<code class="language-csharp">List<A> listOfA = new List<C>().ConvertAll(x => (A)x);</code>
Nach dem Login kopieren

Diese Methoden ermöglichen eine sichere Ausrichtung der Konvertierung und Speicheradresse, um den normalen Betrieb der Liste sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum kann ich einer Liste in C#keine Liste zuweisen?. 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