Warum kann A List<string>
in C#? List<object>
nicht zugewiesen werden
einer List<string>
-Rearablen zu einem Compiler -Fehler. Implizite Konvertierung ist nicht erlaubt, und explizites Casting mit List<object>
schlägt ebenfalls fehl. (List<object>)
Der Grund:
Diese Einschränkung ist auf die Art der Type zurückzuführen. Stellen Sie sich vor, eine solche Aufgabe wäre gestattet. Sie können dann ein Objekt eines anderen Typs als (z. B. einer Ganzzahl oder einer benutzerdefinierten Klasse) zum string
hinzufügen. Dies war jedoch ursprünglich ein List<object>
. Der Versuch, auf Elemente aus dieser Liste zuzugreifen, würde bei der Begegnung mit einem nicht-String-Element zu einem List<object>
-Referenz zugreifen. Der Compiler verhindert diesen potenziellen Laufzeitfehler, indem er die Zuordnung abnimmt. List<string>
string
System.InvalidCastException
Problemumgehungen:
Während eine direkte Zuordnung nicht möglich ist, können Sie den gewünschten Effekt mit alternativen Methoden erzielen:
List<string>
linq: List<object>
Eine prägnantere Lösung verwendet die LINQ -Methode:
Reverse Casting: Cast<T>
<code class="language-csharp">List<string> stringList = new List<string> { "apple", "banana", "cherry" }; List<object> objectList = stringList.Cast<object>().ToList();</code>
nicht zulässig, es sei denn, Sie sind absolut sicher, dass jedes Element im tatsächlich ein ist. Der Versuch, zu besetzen, wenn dies nicht wahr ist, führt zu einer Laufzeitausnahme. C# erzwingt die Typensicherheit, um solche Szenarien zu verhindern. Sie müssten Schecks durchführen oder die
-Methode von Linq verwenden, um nur die Stringelemente sicher zu filtern und zu gießen.
List<object>
Während der umgekehrte Betrieb analog erscheinen mag, verhindern die zugrunde liegenden Typ -Sicherheitsmechanismen in C#, dass es sich um einen einfachen Betrieb handelt. Die sorgfältige Berücksichtigung von Elementtypen ist entscheidend für die Arbeit mit generischen Listen und Typkonvertierungen. List<string>
Das obige ist der detaillierte Inhalt vonWarum kann eine 'List' nicht direkt einer 'List' -Variablen in C#zugewiesen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!