0

コードを共有できませんが、基本的には次のようなインターフェイスを実装するクラスがあります。

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>();
  1. 最初のものはエラーになりました:

'System.Collections.Generic.List<WindowsFormsApplication1.B>'"エラー 1 型を "に変換できません 'System.Collections.Generic.List<WindowsFormsApplication1.A>'

  1. 2 番目はエラーにはなりませんでしたが、 になりましたInvalidCastException

  2. 3番目のものは機能しました。

私の質問は次のとおりです。

  1. 2 行目ではエラーが発生しなかったのに、1 行目ではエラーが発生したのはなぜですか?
  2. 最初の 2 行が有効でないのはなぜですか?
  3. この種のキャストを行うための最良の方法は何ですか? 3行目はそのために良いですか、それとももっと良い方法がありますか
4

3 に答える 3

0

IEnumerable(T) を作成し、リストからデータを入力する必要があります List<B>IEnumerable<A>

于 2013-07-18T22:24:32.923 に答える