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