コードを共有できませんが、基本的には次のようなインターフェイスを実装するクラスがあります。
public interface A
{
void doA();
}
public class B: A
{
public void doA()
{
// Doing A
}
}
そして、私は次のようなAのリストを持っています:
List<B> list = new List<B>();
list.Add(new B());
今私は欲しいですIEnumerable<A>
。だから私はこれらの3行を試しました:
List<A> listCast = (List<A>)list;
IEnumerable<A> listCastToEnumerable = (IEnumerable<A>)list;
IEnumerable<A> listCastExt = list.Cast<A>();
- 最初のものはエラーになりました:
'System.Collections.Generic.List<WindowsFormsApplication1.B>'
"エラー 1 型を "に変換できません'System.Collections.Generic.List<WindowsFormsApplication1.A>'
。
2 番目はエラーにはなりませんでしたが、 になりました
InvalidCastException
。3番目のものは機能しました。
私の質問は次のとおりです。
- 2 行目ではエラーが発生しなかったのに、1 行目ではエラーが発生したのはなぜですか?
- 最初の 2 行が有効でないのはなぜですか?
- この種のキャストを行うための最良の方法は何ですか? 3行目はそのために良いですか、それとももっと良い方法がありますか