使用linq添加一个事件函数



我有一个类集合,我想添加到集合属性更改事件函数中。

当我尝试使用以下代码的LINQ时:

(from s in StreetsVI select s.PropertyChanged += 
    new PropertyChangedEventHandler(Messege)).ToList();

我得到错误:

The type of the expression in the select clause is incorrect. Type inference failed in the call to 'Select'. 

LINQ针对查询。当您想对每个对象执行操作时,这不是一个查询——这都是关于副作用的,您应该只使用普通的foreach循环。LINQ是而不是为在集合上施加副作用而设计的——事实上,副作用与LINQ喜欢的懒惰评估不太匹配。

您应该只使用foreach循环:

foreach (var s in StreetsVI)
{
    s.PropertyChanged += Messege;
}

我还建议你阅读Eric Lippert的foreachForEach博客文章,该文章讨论了陈述和表达之间的哲学差异。

请注意,如果真的想要,您仍然可以使用LINQ,方法是在事件订阅后使用带有语句体和返回语句的lambda表达式。。。但这将是对LINQ的曲解,以至于我甚至不想把它包括在答案中。即使使用List<T>.ForEach也将是一个改进。

尝试:

foreach(var s in StreetsVI) {
    s.PropertyChanged += new PropertyChangedEventHandler(Messege);
}

或者,由于您正在将其作为一个列表,您可以使用本机.ForEach方法:

StreetsVI.ToList()
    .ForEach(s => s.PropertyChanged += new PropertyChangedEventHandler(Messege));

Select必须返回一个值。将事件分配给事件处理程序不会返回值。

相关内容

  • 没有找到相关文章

最新更新