微软是否会让所有系列都可以被LINQ使用?

我一直在使用LINQ(并且喜欢它),但是当我遇到.NET专用集合(DataRowCollection,ControlCollection)时,感觉就像我遇到了一个speedbump。 有没有办法将LINQ与这些专用控件一起使用,如果不是,你认为微软会在下一版本的框架中解决这个问题吗? 或者我们是否继续迭代这些非LINQ方式,或者将项目从集合中拉出到LINQ-able系列中?

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

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

至于微软是否会默认这些实现IEnumerable 。 我的猜测不在这里。 之所以这样做是一个突破性的变化,可能导致代码中的预期行为。 即使简单地为ControlCollection实现IEnumerable也会导致更改过载分辨率,这种分辨率可能并且几乎肯定会破坏用户应用程序。

你应该可以做这样的事情:

 myDataRowCollection.Cast().Where..... 

并以这种方式使用Linq。 如果您知道集合中的对象是什么,那么您应该能够使用它。

原因是:没有实现IEnumerable或IQueryable的集合无法在LINQ中迭代