3

私はここでC#で働いています、たとえば私が持っているとしましょう:

class A
{}

class B : A
{}

List<B> myList;

コードの一部でこのmyListをとしてキャストしたいのですList< A>,が、しようとするとエラーが発生します。

List<A> myUpcastedList = (List<A>)myList; //not working

それを行うことは可能ですか?はいの場合、構文は何ですか?

4

5 に答える 5

5

List<B>にキャストできませんList<A>。新しいものを作成List<A>し、ソース commection からの項目を入力する必要があります。そのためにLINQ to Objectsを使用できます。

var aList= bList.Cast<A>().ToList();

また、 Eric Lippert のブログなどで、共分散と反分散について少し読む必要があります。

于 2013-03-07T21:31:24.613 に答える
3

虎のリストを動物のリストとして使用することはできません。カメを動物のリストに入れることはできますが、虎のリストに入れることはできないからです。

C# 4 および 5 では、カメを動物のシーケンスに入れる方法がないため、IEnumerable<T>代わりに使用する場合、これは合法です。List<T>したがって、次のように言えます。

List<B> myList = new List<B>();
IEnumerable<A> myUpcastedList = myList; // legal
于 2013-03-07T21:56:46.147 に答える
1

私はできました:

List<A> myUpcastedList = myList.ToList<A>();

これはリストのコピーを作成しますが...それが意図したものかどうかはわかりません

于 2013-03-07T21:32:31.233 に答える
1

あなたはおそらくあなたのために役立つこの質問を使うことができます

List<A> testme = new List<B>().OfType<A>().ToList();
于 2013-03-07T21:34:10.167 に答える
1

私の知る限り、これは不可能です。別の方法は、次のことを行うことです。

using System.Linq;

var myUpcastedList = myList.Cast<A>().ToList();
于 2013-03-07T21:30:56.883 に答える