C#中没有参数的Linq表达式

本文关键字:Linq 表达式 参数 | 更新日期: 2023-09-27 18:26:10

下面这行代码是如何使用不带参数的Linq表达式的?(它是()=>)

RaisePropertyChanged(() => FullName);

RasiePropertyChanged的签名为:

protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);

谢谢。

C#中没有参数的Linq表达式

这只是一个返回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;
}

除非您在代码中的某个变量下关闭,否则在这种情况下,编译器实际上会生成一个嵌套类,以便保存对您关闭的变量的引用。