Heim > Backend-Entwicklung > C++ > Warum kann ich in C#keine 'Liste' in eine 'Liste' konvertieren?

Warum kann ich in C#keine 'Liste' in eine 'Liste' konvertieren?

Susan Sarandon
Freigeben: 2025-01-30 13:06:11
Original
706 Leute haben es durchsucht

Why Can't I Convert a `List` to a `List` in C#?

invariante Liste: Verständnis der Konvertierungsrestriktion

Wenn eine Liste abgeleitete Klassen an eine Funktion übergeben wird, die eine Liste von Basisklassen erwartet, können Entwickler auf den Fehler stoßen:

cannot convert from 'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>' to 'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'
Nach dem Login kopieren

Dieser Fehler ist nicht sofort intuitiv, da man annehmen könnte, dass eine Liste der abgeleiteten Klassen mit einer Liste von Basisklassen kompatibel sein sollte. Um den Grund für diese Einschränkung zu verstehen, ist es wichtig, das Konzept der -Kovarianz in generischen Sammlungen zu erfassen. In C# kann entweder kovarianten oder invariant sein. Kovariante Sammlungen ermöglichen die Substitution abgeleiteter Typen für ihre Basistypen, während invariante Sammlungen nicht.

list & lt; t & gt; ist ein Beispiel für eine invariante Sammlung. Dies bedeutet, dass eine Liste & lt; abgeleitete Klasse & gt; kann einer Liste nicht zugewiesen werden & lt; BaseClass & gt; Da der Compiler garantiert, dass alle Elemente in einer Liste immer vom deklarierten Typ T.

Auswirkungen der Invarianz für die Liste & lt; t & gt; T & gt; schützt vor ungültigen Operationen, die die Sicherheit der Typ verletzen könnten. Zum Beispiel, wenn eine Liste & lt; BaseClass & gt; wird einer Liste zugeordnet und abgeleitete Klasseninstanzen abgeleitet werden möglicherweise durch Basisklasseninstanzen ersetzt werden, was zu unerwarteten Verhaltensweisen führt. > Um eine Liste abgeleiteter Klassen sicher an eine Funktion zu übergeben, die eine Liste von Basisklassen erwartet, können Entwickler

iEnumerable & lt; t & gt; verwenden, was kovariante

ist. Dies ermöglicht die Substitution abgeleiteter Typen durch Basistypen, die das Problem der Konvertierung ohne Kompromisse bei der Sicherheit auflöst.

Das obige ist der detaillierte Inhalt vonWarum kann ich in C#keine 'Liste' in eine 'Liste' konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage