9

私はしばらく LINQ を使用してきました (そして楽しんでいます) が、.NET に特化したコレクション (DataRowCollection、ControlCollection) に出くわすとスピードバンプにぶつかったように感じます。これらの特殊なコントロールで LINQ を使用する方法はありますか? もしそうでない場合、Microsoft はフレームワークの次のリリースでこれに対処すると思いますか? それとも、これらを LINQ 以外の方法で反復処理するか、コレクションからアイテムを自分で LINQ 対応のコレクションにプルする必要がありますか?

4

3 に答える 3

22

ControlCollectionのようなコレクションがLINQで機能しない理由は、強く型付けされていないためです。要素タイプがないと、LINQは強く型付けされたメソッドを作成できません。タイプがわかっている限り、このCastメソッドを使用して強く型付けされた列挙を作成できるため、LINQで使用できます。例えば

ControlCollection col = ...
var query = col.Cast<Control>().Where(x => ...);

Microsoftは、これらをデフォルトで実装する予定IEnumerable<T>です。私の推測はここにはありません。その理由は、そうすることは重大な変更であり、コードで予期される動作を引き起こす可能性があるためです。を実装IEnumerable<Control>するだけでもControlCollection、過負荷の解決に変更が加えられ、ユーザーアプリケーションが破損する可能性があります。

于 2010-02-11T22:03:45.640 に答える
4

あなたはこのようなことをすることができるはずです:

myDataRowCollection.Cast<DataRow>().Where.....

そのようにLinqを使用します。コレクション内のオブジェクトが何であるかを知っている場合は、それを使用できるはずです。

于 2010-02-11T22:05:29.883 に答える
1

この理由は次のとおりです。実装されていないIEnumerable<T>、またはIQueryableでないコレクションは、LINQで反復できません。

于 2010-02-11T22:03:53.663 に答える