1

(e, v) =>C# 中的语法是什么意思?

例如,

TreeViewModel root = TreeViewModel.initializeRoot(parentStatus, statuses);
root.PropertyChanged += (e, v) => updateConditions();

我知道我正在注册以监听根对象的属性更改。而且,如果发生这样的事件,那么我将调用该updateConditions()方法。但是,(e, v) =>介于两者之间的是什么?

而且,有没有办法将更改的属性作为参数发送到updateConditions()

4

3 回答 3

6

这是一个Lambda 表达式。基本上,它创建了一个匿名方法,该方法调用updateConditions()并将事件绑定到该匿名方法。

相当于。

private void root_PropertyChanged(object e, PropertyChangeEventArgs v)
{
    updateConditions();
}

root.PropertyChanged += root_PropertyChanged
于 2013-04-12T18:08:02.300 回答
6

对于你的第二个问题:

可以将更新的内容发送PropertyNameupdateConditions(). 因为v是类型PropertyChangedEventArgs它具有PropertyName属性:

root.PropertyChanged += (e, v) => updateConditions(v.PropertyName);
于 2013-04-12T18:11:30.900 回答
1

该语法(e, v) => (some sort of expression)创建一个 lambda 函数,接受参数“e”和“v”,然后返回计算表达式的结果。它基本上是一种就地创建函数的方式,因此您不必定义委托并以这种方式传递委托。在您的情况下,它接受参数 e 和 v 然后简单地返回调用的结果updateConditions()。查看http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C以了解有关如何使用这些的更多详细信息。

于 2013-04-12T18:09:11.417 回答