2012-01-05 13 views
4

私は2つのタイプのデータを受け入れなければならない関数を持っています - 観測可能なMyClassのコレクションとmyclassの2次元配列。私はこれらのコレクションでlinqクエリを使用するので、構造は重要ではありません。私は2次元配列と観測可能なコレクションの両方がIEnumerableを実装しているので、タイプIEnumerable<MyClass>のパラメータを受け付ける関数を作成しました。これは動作するはずです。2次元アレイはIEnumerableではありませんか?

しかし、MyClass [、]型のパラメータを関数に渡そうとすると、コンパイル時エラーが発生します。引数型Myclass [、]はパラメータ型IEnumerable<MyClass>に割り当てられません。

どうしたのですか?ありがとうございました。

+0

:あなたはCastを呼び出して簡単にこの問題を解決することができますタイプIEnumerable のです。それらは異なるものです。 –

+1

@ rich.okelly: 'Array'はジェネリックでないときに' IEnumerable 'をどのように実装できますか? (私の答えを参照してください...) –

+0

@ rich.okelly:私はその後、ドキュメントのバグを報告したいと思います。最初に考えずにMSDNで読むすべてを信じてはいけません。 –

答えて

9

長方形配列はIEnumerableを実装するのですが、彼らは(任意のTのために、明白な要素の型を含む)IEnumerable<T>を実装していません。あなたはあなたの方法は、タイプ `IEnumerable`のパラメータを受け入れることを主張するが、エラーメッセージを与え、私はそれがパラメータを受け入れる疑う - 私はあなたの質問が不正確であると信じて

SomeMethod(array.Cast<MyClass>()); 
+0

ありがとう。これは間違った質問かもしれませんが、正確にはIenumerableとIenumerableの違いは何ですか?? –

+0

@VojtechRuzicka:IEnumerable は 'IEnumerable'を拡張していますが、それらは異なるインターフェースです。 'IEnumerable 'は総称であり、 'IEnumerable'はそうではありません。ジェネリックを気にかけていない人は、今すぐ読むことができます:) –

+0

興味深いことに、私は2次元配列を列挙することが可能であることを知りませんでした。 –

関連する問題