キャスト リスト
次のコードを考えてみましょう。
public interface IDic { int Id { get; set; } string Name { get; set; } } public class Client : IDic { } List<Client> clients = new List<Client>();
多くのプログラマは、この List
List<IDic> dics = (List<IDic>)clients;
ただし、これは有効なキャストではありません。このタイプのキャストは型安全に違反するため許可されません。このキャストを試行すると、次のエラーが発生します:
Cannot convert type 'System.Collections.Generic.List<Client>' to 'System.Collections.Generic.List<IDic>'
Why is this Cast Not allowed?
このキャストが許可されない理由は、危険な行動の可能性。たとえば、次のシナリオを想像してください。
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];
この例では、List
安全な変換オプション
List
List<IFruit> fruit = apples.ToList<IFruit>();
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
これらの変換により新しいリストが作成されることに注意することが重要です。一方のリストに加えた変更は、もう一方のリストには反映されません。ただし、リスト内のオブジェクトに加えられた変更は両方のリストに表示されます。
以上がC# で `List` を `List` に直接キャストできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。