我有一个类的集合,我想添加到集合属性更改事件函数.
当我尝试使用LINQ使用此代码执行此操作时:
(from s in StreetsVI select s.PropertyChanged +=
new PropertyChangedEventHandler(Messege)).ToList();
Run Code Online (Sandbox Code Playgroud)
我收到错误:
The type of the expression in the select clause is incorrect. Type inference failed in the call to 'Select'.
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
LINQ旨在进行查询.当你想要做的事,以每一个对象,这不是一个查询-这是所有关于副作用,你应该只使用一个正常的foreach循环.LINQ 不是为了对集合施加副作用而设计的 - 实际上,副作用与LINQ所偏爱的懒惰评估并不相称.
你应该只使用一个foreach循环:
foreach (var s in StreetsVI)
{
s.PropertyChanged += Messege;
}
Run Code Online (Sandbox Code Playgroud)
我还建议您阅读Eric Lippert的foreachvsForEach博客文章,其中讨论了语句和表达之间的哲学差异.
注意,如果你真的想要你仍然可以使用LINQ,通过在事件订阅之后使用带有语句体和返回语句的lambda表达式......但是它会在某种程度上反转LINQ,以至于我没有甚至想把它包括在答案中.即使使用List<T>.ForEach也会有所改善.