Heim >Backend-Entwicklung >C++ >Warum kann ich einer Liste in C#keine Liste zuweisen?
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>
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
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<基类>
<.> 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>
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!