Heim > Backend-Entwicklung > C++ > Warum kann ich in C# eine „Liste' nicht direkt in eine „Liste' umwandeln?

Warum kann ich in C# eine „Liste' nicht direkt in eine „Liste' umwandeln?

DDD
Freigeben: 2025-01-17 01:01:12
Original
320 Leute haben es durchsucht

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

Betonliste to List

Bedenken Sie den folgenden Code:

public interface IDic
{
    int Id { get; set; }
    string Name { get; set; }
}
public class Client : IDic
{

}

List<Client> clients = new List<Client>();
Nach dem Login kopieren

Viele Programmierer gehen möglicherweise davon aus, dass sie diese List zu einer Liste:

List<IDic> dics = (List<IDic>)clients;
Nach dem Login kopieren

Dies ist jedoch keine gültige Besetzung. Diese Art der Umwandlung ist nicht zulässig, da sie die Typsicherheit verletzen würde. Wenn Sie diesen Zauber versuchen, tritt der folgende Fehler auf:

Cannot convert type 'System.Collections.Generic.List<Client>' to 'System.Collections.Generic.List<IDic>'
Nach dem Login kopieren

Warum ist dieser Zauber nicht zulässig?

Der Grund, warum dieser Zauber nicht zulässig ist, liegt an der Potenzial für unsicheres Verhalten. Stellen Sie sich zum Beispiel dieses Szenario vor:

public interface IFruit {}

public class Apple : IFruit {}
public class Banana : IFruit {}

...

List<Apple> apples = new List<Apple>();
List<IFruit> fruit = (List<IFruit>)apples; // Assumed cast
fruit.Add(new Banana());

// Eek - it's a banana!
Apple apple = apples[0];
Nach dem Login kopieren

In diesem Beispiel ist die Liste wird in eine Liste umgewandelt. Dadurch kann ein Banana-Objekt zur Obstliste hinzugefügt werden. Wenn jedoch auf das erste Element der Apfelliste zugegriffen wird, wird es immer noch als Apfel behandelt. Dies kann zu unerwartetem Verhalten und potenziellen Fehlern führen.

Sichere Konvertierungsoptionen

Während Sie eine List in eine List gibt es sichere Möglichkeiten zum Konvertieren zwischen diesen Typen.

  • ToList(): In .NET 4.0 und höher können Sie die verwenden ToList()-Methode zum Konvertieren einer List in eine neue Liste einfügen. Diese Methode erstellt eine neue Liste mit denselben Elementen, aber unter Verwendung des angegebenen Schnittstellentyps.
List<IFruit> fruit = apples.ToList<IFruit>();
Nach dem Login kopieren
  • Cast().ToList(): In .NET 3.5 können Sie die Methode Cast() verwenden, um ein IEnumerable zu erhalten. aus einer Liste. Anschließend können Sie mit ToList() eine neue List erstellen. aus dem IEnumerable.
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
Nach dem Login kopieren

Es ist wichtig zu beachten, dass diese Konvertierungen neue Listen erstellen. An einer Liste vorgenommene Änderungen werden in der anderen nicht übernommen. Änderungen an den Objekten in den Listen werden jedoch in beiden Listen sichtbar.

Das obige ist der detaillierte Inhalt vonWarum kann ich in C# eine „Liste' nicht direkt in eine „Liste' umwandeln?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage