Heim >Backend-Entwicklung >C++ >Kann die Liste der Liste in C#zugewiesen werden?
C# Varianzproblem: Signieren Sie die Liste & lt;
im Problem der Liste & lt; Gibt es eine Lösung? Beispiel
Betrachten Sie den folgenden Code:
Zusammenarbeit
Koordination ist die Fähigkeit, das abgeleitete Typobjekt zu halten, wenn erklärt, dass die Datenstruktur ein Basistyp -Objekt enthalten kann. Im obigen Beispiel kann List
<code class="language-csharp">class Animal { } class Giraffe : Animal { } static void Main(string[] args) { // 数组赋值成功 Animal[] animals = new Giraffe[10]; // 隐式赋值失败 List<Animal> animalsList = new List<Giraffe>(); // 错误 // 显式转换失败 List<Animal> animalsList2 = (List<Animal>)new List<Giraffe>(); // 错误 }</code>ein Objekt des Tieres oder eines abgeleiteten Typs (z. B. Giraffe) enthalten.
Der quadratische Unterschied im Array und die Liste
Das Array unterstützt die Referenztypvarianz zur Laufzeit und führt die Typinspektion durch. Generika sind jedoch so konzipiert, dass sie während der Kompilierung die Type Sicherheit erreichen. Daher schlägt die versteckte und explizite Zuordnung von List
unsicher quadratische Differenz
Wenn diese Art von Quadratvarianz zulässig ist, werden Laufzeitfehler verursacht, wie im folgenden Code gezeigt:
c# 4 wurde Unterstützung für die generische Sicherheitsvarianz in der Schnittstelle und Verantwortung eingeführt. Die Schnittstellen wie Func (kollaborativ) und Verantwortung wie Action (inverse) gewährleisten die Type -Sicherheit.
Lösung
<code class="language-csharp">List<Giraffe> giraffes = new List<Giraffe>(); giraffes.Add(new Giraffe()); List<Animal> animals = giraffes; // 错误 animals.Add(new Lion()); // 不安全,违反类型安全</code>
In C# 2, wenn Sie keine einzelne Liste verwalten müssen, können Sie die Liste .Convertall verwenden, um eine neue Liste mit dem Bedarfstyp zu erstellen.
Diese Revisions-Ausgabe behält das Originalbild bei, um den Text umzusetzen, um die Pseudoorientierung zu erreichenDas obige ist der detaillierte Inhalt vonKann die Liste der Liste in C#zugewiesen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!