Will Microsoft ever make all collections useable by LINQ?

夙愿已清 提交于 2019-12-06 21:12:34

问题


I've been using LINQ for awhile (and enjoy it), but it feels like I hit a speedbump when I run across .NET specialized collections(DataRowCollection, ControlCollection). Is there a way to use LINQ with these specialized controls, and if not do you think Microsoft will address this in the next release of the framework? Or are we left to iterate over these the non-LINQ way, or pull the items out of the collection into LINQ-able collections ourselves?


回答1:


The reason why collections like ControlCollection do not work with LINQ is that they are not strongly typed. Without an element type LINQ cannot create strongly typed methods. As long as you know the type you can use the Cast method to create a strongly typed enumeration and hence be used with LINQ. For example

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

As to will Microsoft ever make these implement IEnumerable<T> by default. My guess is no here. The reason why is that doing so is a breaking change and can cause expected behavior in code. Even simply implementing IEnumerable<Control> for ControlCollection would cause changes to overload resolution that can, and almost certainly will, break user applications.




回答2:


You should be able to do something like this:

myDataRowCollection.Cast<DataRow>().Where.....

and use Linq that way. If you know what the objects in the collection are, then you should be able to use that.




回答3:


The reason for this is: Collections which do not implement IEnumerable<T> or IQueryable, can not be iterated in LINQ



来源:https://stackoverflow.com/questions/2248049/will-microsoft-ever-make-all-collections-useable-by-linq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!