Heim >Backend-Entwicklung >C++ >Warum kann eine 'List' nicht direkt einer 'List' -Variablen in C#zugewiesen werden?

Warum kann eine 'List' nicht direkt einer 'List' -Variablen in C#zugewiesen werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-28 13:31:09828Durchsuche

Why Can't a `List` Be Directly Assigned to a `List` Variable in C#?

Warum kann A List<string> in C#? List<object> nicht zugewiesen werden

In C#führt die direkte Zuweisung eines

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:

    iteratives Kopieren:
  1. Der einfachste Ansatz besteht darin

    List<string> linq: List<object> Eine prägnantere Lösung verwendet die LINQ -Methode:

  2. 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>
    Der umgekehrte Guss - von
  3. bis
- ist eine andere Sache. Dies ist im Allgemeinen

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!

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