Betonliste
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>();
Viele Programmierer gehen möglicherweise davon aus, dass sie diese List
List<IDic> dics = (List<IDic>)clients;
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>'
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];
In diesem Beispiel ist die Liste
Sichere Konvertierungsoptionen
Während Sie eine List
List<IFruit> fruit = apples.ToList<IFruit>();
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
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!