1

内部リストを使用する次のようなクラスがあります。

public class MyList<T> : IEnumerable<T>
{
        private List<T> _lstInternal;
        public MyList()
        {
            _lstInternal = new List<T>();
        }
        public static implicit operator List<T>(MyList<T> toCast)
        {
            return toCast._lstInternal;
        }

}

MyList<object>を受け取る関数に渡そうとするとList<object>、InvalidCastExceptionが発生します。なんで?

4

1 に答える 1

1

あなたが説明したクラスを使用して、次のコードが私のために働きました:

static void Main(string[] args)
{
   MyList<object> foo = new MyList<object>();

   MyMethod(foo);
}

static void MyMethod(List<object> things)
{
   // No InvalidCastException when called...
}

MyList<T>あなたがあなたの質問に投稿したクラスから私が変更した唯一のことは、次の実装を追加することでしたIEnumerable<T>

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

コメントで述べたように、C#バージョン4.0を使用している場合を除いて、なぜ例外が発生するのかよくわかりません。どのバージョンを使用していますか?

于 2010-10-27T19:48:53.073 に答える