9

我使用 LINQ 已经有一段时间了(并且很享受它),但是当我遇到 .NET 专用集合(DataRowCollection、ControlCollection)时,感觉就像遇到了一个减速带。有没有办法将 LINQ 与这些专用控件一起使用,如果没有,您认为 Microsoft 会在框架的下一个版本中解决这个问题吗?还是让我们以非 LINQ 方式迭代这些项目,或者我们自己将项目从集合中拉出到支持 LINQ 的集合中?

4

3 回答 3

22

像这样的集合不能与 LINQ 一起使用的原因ControlCollection是它们不是强类型的。没有元素类型 LINQ 无法创建强类型方法。只要您知道类型,就可以使用该Cast方法创建强类型枚举,从而与 LINQ 一起使用。例如

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

至于微软是否会IEnumerable<T>默认实现这些功能。我的猜测是不在这里。这样做的原因是一个重大更改,并且可能导致代码中的预期行为。即使简单地实现IEnumerable<Control>forControlCollection也会导致重载决议的变化,这可能而且几乎肯定会破坏用户应用程序。

于 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 回答