Heim >Backend-Entwicklung >C++ >Warum kann ich die Liste in C#nicht zuweisen.
C# Differenz: Zuweisen Sie eine Liste & lt;
Versuchen Sie bei Verwendung einer generischen Liste in C#die Liste des abgeleiteten Typs der Liste des abgeleiteten Typs zuzuweisen. Dieses Problem wird durch einen Konflikt zwischen der Art der Sicherheit und der Kompilierung der Art Sicherheit während der Laufzeit verursacht. Beispiel- und Codebeispiel
Betrachten Sie den folgenden Code:
In diesem Beispiel ist es aufgrund der Laufzeitprüfung wirksam, das Giraffe -Array dem Tierarray zuzuweisen. Die Verteilung der Liste zur Auflistung
verursacht jedoch bei der Zusammenstellung Fehler.unterschiedliche und Sicherheitsprobleme
<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>
Diese Zuordnung kann jedoch Sicherheitsprobleme verursachen. Wenn das neue Löwenobjekt zur AnimalList hinzugefügt wird, kann es ohne Zusammenstellung von Tierelist2 zugewiesen werden, auch wenn es gegen die Art der Sicherheitstyp der Tierliste verstößt.
Lösung in C#
C# 4 Der Sicherheitsquadrat Unterschied:
C# 4 führt die Unterstützung für die Sicherheitsvarianz von Schnittstellen und Verantwortung ein. Func
In C# 2 können Sie List .Convertall verwenden, um eine neue Liste mit dem erforderlichen Typ zu erstellen.
Schlussfolgerung
c#Varianzproblem hebt die Bedeutung der Aufrechterhaltung der Typsicherheit während der generischen Zuordnung hervor. Obwohl die Anzahl der Array- oder Laufzeitprüfung zur Erreichung unsicherer Quadrate verwendet werden kann, kann die Sicherheitsabweichung mit Schnittstellen und Verantwortung den richtigen Typ des Typs während der Kompilierung sicherstellen. Für die frühe Version von C#können Sie List
Das obige ist der detaillierte Inhalt vonWarum kann ich die Liste in C#nicht zuweisen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!