C#中没有参数的Linq表达式
本文关键字:Linq 表达式 参数 | 更新日期: 2023-09-27 18:26:10
下面这行代码是如何使用不带参数的Linq表达式的?(它是()=>)
RaisePropertyChanged(() => FullName);
RasiePropertyChanged的签名为:
protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);
谢谢。
这只是一个返回FullName字符串的表达式。
根据签名,你可以看到它返回了一个与相同的Func<string>
private string SomeStringMethod()//string comes from the <T> being string
{
return FullName;
}
此lambda:
() => FullName
相当于这个命名的方法:
private string SomeMethod()
{
return FullName;
}
空括号只是表示没有参数。
lambda () => FullName
实际上将被转换为私有的静态方法,如上所述。
当C#代码用中间语言编译时,所有委托(Func只不过是一个封装方法的委托,该方法返回某种类型的T(在您的情况下,是一个字符串),并且不接受输入参数)。
所以,基本上,λ等于:
private static string AMethod()
{
return FullName;
}
除非您在代码中的某个变量下关闭,否则在这种情况下,编译器实际上会生成一个嵌套类,以便保存对您关闭的变量的引用。