ホームページ >バックエンド開発 >C++ >C# でリストをリストにキャストするにはどうすればよいですか?

C# でリストをリストにキャストするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-09 22:41:41386ブラウズ

How Can I Cast a List to a List in C#?

C# での派生クラスのリストを基本クラスのリストに変換する

この例は、基本クラス オブジェクト (List<Cat>) のリストを期待するメソッドに派生クラス オブジェクトのリスト (例: List<Animal>) を渡すという一般的な問題を示しています。 基本クラス参照は派生クラス オブジェクトを直接指すことができないため、直接代入は許可されません。

問題:

List<Cat> パラメータを持つメソッドに List<Animal> を渡そうとすると、コンパイラ エラーが発生します。

解決策: IEnumerable と共分散の使用

このソリューションは C# の一般的な共分散を利用します。 List<Animal> を使用する代わりに、メソッドのパラメーターの型を IEnumerable<Animal> に変更します。 IEnumerable は読み取り専用インターフェイスです。これにより、メソッドによる元のコレクションの変更が防止され、潜在的な型安全性の問題に対処できます。

改訂コード:

<code class="language-csharp">class Animal
{
    public virtual void Play(IEnumerable<Animal> animals) { }
}

class Cat : Animal
{
    public override void Play(IEnumerable<Animal> animals)
    {
        //Implementation
    }
}

class Program
{
    static void Main()
    {
        Cat myCat = new Cat();
        myCat.Play(new List<Cat>()); // This now compiles successfully
    }
}</code>

これが機能するのは、List<Cat> が暗黙的に IEnumerable<Cat> に変換され、IEnumerable<Cat>IEnumerable<Animal> と共変であるためです。 Play メソッドは、コレクションを変更せずに安全にコレクションを反復処理できるようになりました。 このアプローチでは、型の安全性を維持しながら、柔軟なメソッドのパラメーター化を可能にします。

以上がC# でリストをリストにキャストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。