私はここでC#で働いています、たとえば私が持っているとしましょう:
class A
{}
class B : A
{}
List<B> myList;
コードの一部でこのmyListをとしてキャストしたいのですList< A>,
が、しようとするとエラーが発生します。
List<A> myUpcastedList = (List<A>)myList; //not working
それを行うことは可能ですか?はいの場合、構文は何ですか?
私はここでC#で働いています、たとえば私が持っているとしましょう:
class A
{}
class B : A
{}
List<B> myList;
コードの一部でこのmyListをとしてキャストしたいのですList< A>,
が、しようとするとエラーが発生します。
List<A> myUpcastedList = (List<A>)myList; //not working
それを行うことは可能ですか?はいの場合、構文は何ですか?
List<B>
にキャストできませんList<A>
。新しいものを作成List<A>
し、ソース commection からの項目を入力する必要があります。そのためにLINQ to Objectsを使用できます。
var aList= bList.Cast<A>().ToList();
また、 Eric Lippert のブログなどで、共分散と反分散について少し読む必要があります。
虎のリストを動物のリストとして使用することはできません。カメを動物のリストに入れることはできますが、虎のリストに入れることはできないからです。
C# 4 および 5 では、カメを動物のシーケンスに入れる方法がないため、IEnumerable<T>
代わりに使用する場合、これは合法です。List<T>
したがって、次のように言えます。
List<B> myList = new List<B>();
IEnumerable<A> myUpcastedList = myList; // legal
私はできました:
List<A> myUpcastedList = myList.ToList<A>();
これはリストのコピーを作成しますが...それが意図したものかどうかはわかりません
あなたはおそらくあなたのために役立つこの質問を使うことができます
List<A> testme = new List<B>().OfType<A>().ToList();
私の知る限り、これは不可能です。別の方法は、次のことを行うことです。
using System.Linq;
var myUpcastedList = myList.Cast<A>().ToList();