Heim >Backend-Entwicklung >C++ >Warum kann ich die Liste in C#nicht zuweisen.

Warum kann ich die Liste in C#nicht zuweisen.

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-02-02 05:16:09202Durchsuche

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

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>

Dieses Problem hängt mit dem Varianzkonzept im generischen Typ zusammen. Die Koordination ermöglicht die Verwendung abgeleiteter Typen in der Basistypposition, und der Wechselrichter ermöglicht die Verwendung von Basistypen in der abgeleiteten Positionsposition. Im obigen Beispiel wird die Liste , die einen Wert zur Liste

zuweist, als koordinierte Änderung angesehen.

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#

Verwenden Sie das Array zum Ausführen während der Laufzeit:

Das Array unterstützt die Varianz des Referenztyps während der Laufzeit, mit der das abgeleitete Typ -Array dem Basistyp -Array zugewiesen werden kann.

C# 4 Der Sicherheitsquadrat Unterschied:

C# 4 führt die Unterstützung für die Sicherheitsvarianz von Schnittstellen und Verantwortung ein. Func ist eine koordinierte Änderung in T, und die Aktion ist in T.

C# 2 Methode:

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 .Convertall als alternative Lösung verwenden.

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!

Stellungnahme:
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