我一直在使用LINQ一段时间(并享受它),但是当我运行.NET专门的集合(DataRowCollection,ControlCollection)时,感觉就像我碰到一个speedbump.有没有办法使用LINQ与这些专门的控件,如果不认为微软将在下一个版本的框架中解决这个问题?还是我们离开这些非LINQ方式来迭代,还是将这些集合中的项目自己拉出LINQ的集合?
解决方法
像ControlCollection这样的集合对LINQ不起作用的原因是它们不是强类型的.没有一个元素类型LINQ不能创建强类型的方法.只要你知道类型,你可以使用Cast方法来创建一个强类型的枚举,因此与LINQ一起使用.例如
ControlCollection col = ... var query = col.Cast<Control>().Where(x => ...);
至于微软是否会做这些实现IEnumerable< T>默认.我的猜测不在这里.原因是这样做是一个突破性的变化,并可能导致代码中的预期行为.即使简单地实现IEnumerable< Control>对于ControlCollection会导致更改重载分辨率,而且几乎肯定会破坏用户应用程序.