1. ホーム
  2. c#

[解決済み】List<DerivedClass>からList<BaseClass>に変換する。

2022-04-08 01:22:24

質問

ベースクラス/インターフェースを継承することは可能ですが、なぜ List<> 同じクラス/インターフェイスを使用していますか?

interface A
{ }

class B : A
{ }

class C : B
{ }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // OK
        List<A> listOfA = new List<C>(); // compiler Error
    }
}

回避する方法はありますか?

解決方法は?

これを動作させる方法は、リストに対して反復処理を行い、要素をキャストすることです。これは、ConvertAllを使用して行うことができます。

List<A> listOfA = new List<C>().ConvertAll(x => (A)x);

また、Linqを使うこともできます。

List<A> listOfA = new List<C>().Cast<A>().ToList();