2014-10-10 78 views
1

以下使用Linq表達式且不帶參數的代碼行如何工作? (它是()=>)C#中Linq表達式無參數

RaisePropertyChanged(() => FullName); 

RasiePropertyChanged的簽名是:

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

謝謝。

回答

1

這只是一個返回FullName字符串的表達式。

基礎上簽名,你可以看到它返回一個Func<string>這是一樣的

private string SomeStringMethod()//string comes from the <T> being string 
{ 
    return FullName; 
} 
1

這拉姆達:

() => FullName 

相當於這個命名方法:

private string SomeMethod() 
{ 
    return FullName; 
} 

空括號只是表示沒有參數。

0

該lambda () => FullName實際上將被轉換爲私人靜態方法,如上面的答案所述。當C#代碼以中間語言編譯時,所有代表(Func只不過是封裝返回某種類型T(在你的情況下是一個字符串)的方法的委託,並且不帶任何輸入參數)。

所以,基本上,拉姆達相當於:

private static string AMethod() 
{ 
    return FullName; 
} 

除非你是下在代碼中的一些變量,在這種情況下,編譯器將實際上爲了保持參照生成一個嵌套類關閉您正在關閉的變量。