Heim >Backend-Entwicklung >C++ >Warum kann ich in C#keine 'Liste' in eine 'Liste' geben?
kann nicht in List<string>
konvertiert werden? List<object>
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>
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!