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

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

Susan Sarandon
Susan SarandonOriginal
2025-01-28 13:51:09817Durchsuche

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

c# Typ Conversion Problem: Warum

kann nicht in List<string> konvertiert werden? List<object>

In C#versuchen Sie

Variablen List<string> Objekte zuzuweisen, um eine interessante Anomalie zu verursachen. Warum diese Konvertierung nicht erlaubt ist und hat viele Entwickler immer beunruhigt. List<object>

Problemanalyse

Betrachten Sie das folgende Codefragment:

Interesse und explizite Konvertierungsversuche scheiterten, was uns den Grund wundern ließ.
<code class="language-csharp">List<string> sl = new List<string>();
List<object> ol;
ol = sl; // 隐式转换不被允许
ol = (List<object>)sl; // 显式转换也失败</code>

Die Grundursache

Der Hauptgrund für diese Grenze ist, dass Inkonsistenz innerhalb der Liste auftreten kann. Wenn wir diese Konvertierung zulassen und dann den Typ von zur Liste zur Liste hinzufügen, wird die String -Liste inkonsistent.

Wenn auf die erste Liste der Iteration verwiesen wird, werden wir auf eine abnormale Klassenkonvertierung stoßen, da die Foo -Schance nicht in eine Zeichenfolge konvertiert werden kann. Die Konsistenz des Wartungstyps ist unerlässlich, um die Integrität von Daten in der Liste zu gewährleisten.

Umkehrkonvertierung: Mehr in der Tiefe -Diskussion Foo

Über umgekehrte Konvertierung trat jedoch ein interessantes Problem auf:

Ist diese Konvertierung erlaubt? Obwohl dies nützlich erscheinen mag, kann es ein Fehler oder eine Inkonsistenz während der Laufzeit sein. Von einer allgemeineren Klasse () bis zur Konvertierung spezifischerer Klassen (

) ist jedes Objekt, das der String -Liste hinzugefügt wurde, möglicherweise nicht mit der Objektliste kompatibel.

<code class="language-csharp">List<object> ol = new List<object>();
List<string> sl;
sl = (List<string>)ol;</code>
Kann die umgekehrte Konvertierung in C#erfolgreich sein?

object Es ist nicht klar, ob diese umgekehrte Umwandlung in C#legal ist. Wenn es legal ist, wird der Unterschied zwischen der versteckten Darstellung und der expliziten Konvertierung hervorgehoben, und letztere scheint gegen die Typ -Konsistenzregel zu verstoßen. Weitere Tests und Klärung dieses Aspekts werden sehr wertvoll sein. string

Das obige ist der detaillierte Inhalt vonWarum kann ich in C#keine 'Liste' in eine 'Liste' geben?. 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