0

重複の可能性:
C#の差異の問題:List<Derived>をList<Base>として割り当てています

リストの継承に問題があります。より多くの指定されたメンバーを持つ一般的なリストは、その基本メンバーを持つリストに変換できないように見えます。これを見てください:

class A
{
    public int aValue {get; set;}
}

class B : A
{
    public int anotherValue {get; set;}
}

List<B>これで、aもであると期待するかもしれませんが、List<A>そうではありません。 List<A> myList = new List<B>()不可能である。List<A> myList = (List<A>)new List<B>()オブジェクト指向プログラミングで3年間働いた後、ここでいくつかの基本的な概念を見逃していませんか?

4

2 に答える 2

6

うん!

あなたができると仮定します

List<A> myList = new List<B>();

次に、クラスがあると仮定します

class C : A { public int aDifferentValue { get; set; } }

ACはであるため、と思われるように呼び出すことAができると期待されます。myList.Add(new C())myListList<A>

しかし、aはそうCではありません-これは実際には-を保持することはできません。BmyListList<B>C


逆に、あなたができるとしましょう

List<B> myList = new List<A>();

aはであるmyList.Add(new B())ため、喜んで電話をかけることができます。BA

しかし、他の何かがCリストに詰まっていると仮定します(のようCA)。

次に、ではない-をmyList[0]返す場合があります。CB

于 2012-12-10T14:33:03.480 に答える
-2

その単純な変換は許可されていません今のところ使用

List<B> lb = new List<B> { ... };
List<A> la = lb.Cast<A>().ToList();
于 2012-12-10T14:32:22.720 に答える