Betrachten Sie den folgenden Code:
Dieser Code führt zu Kompilierungsfehlern, wenn versucht wird,
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>(); // 编译错误 } }
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:
List<A> listOfA = new List<C>().ConvertAll(x => (A)x);
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!