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