2011-09-01 40 views

回答

6

UpdateUI()和UpdateNetworkIndicator()方法都是自定義事件處理程序方法。

+ =操作符將這些事件處理程序分別附加到由應用程序和NetworkChange觸發的事件。

=>表示一個lambda表達式。 (s,e)是輸入參數(在這種情況下,標準發件人,事件參數),並且=>的右側是語句或表達式。

在這種情況下,你可以爲改寫這個:

app.InstallStateChanged += UpdateUI; 
NetworkChange.NetworkAddressChanged += UpdateNetworkIndicator; 

,它應該工作一樣好。

+0

謝謝大家對此的幫助!我已經勾選了這一個,因爲它將混淆轉化爲我理解的東西,但我很欣賞其他意見,這些意見提高了我的理解。 – Hunt

9

這是一個lambda表達式。

「所有lambda表達式使用拉姆達運算符=>,它讀作 ‘變爲’。拉姆達操作者的左側指定輸入 參數(如果有的話)和右側保持表達或 語句塊。Lambda表達式X => X * X讀作 「X變爲X 倍×」。

http://msdn.microsoft.com/en-us/library/bb397687.aspx

1

InstallStateChanged和NetworkAddressChanged的活動,什麼you're眼見用於定義事件處理程序以在各個事件觸發時調用UpdateUI或UpdateNetworkIndicator的lambda語法。

9

這是一個包含多個參數的lambda expression。在這種情況下(因爲您使用函數來替換事件處理函數),它們相當於objectEventArgs參數。

您的代碼等同於下面

app.InstallStateChanged += OnInstallStateChanged; 
NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged; 

/* ... */ 

private void OnInstallStateChanged(object s, EventArgs e) 
{ 
    UpdateUI(); 
} 

private void OnNetworkAddressChanged(object s, EventArgs e) 
{ 
    UpdateNetworkIndicator(); 
} 
+1

+1此答案獲得我的投票。爲__good__ stackoverflow答案IMO設置適當的模式。 – AnthonyWJones

2

考慮這個例子

Button1.Click += (s, e) => log(e); 

是短手(使用λ表達式),用於

Button1.Click += new EventHandler(Button1_Click); 

void Button1_Click(object sender, EventArgs e) 
{ 
    log(e); 
} 
1

該語法被稱爲Lambda Expression。從MSDN,

lambda表達式是一個可以包含 表達式和語句,並且可以用於創建代表或 表達式樹類型的匿名函數。

(s, e)聲明所創建的委託或表達式樹的輸入參數。當只有一個輸入參數時,不需要括號,只需寫入s => ...即可。當有多個參數時,需要括號 - (s, e) =>

1

簡而言之,s和e是指其功能所針對的屬性。代碼表達:您有兩種類型的對象可以在此函數中訪問。當這個函數被調用時,從s對象獲取這個或那個屬性並按照以下方式使用它的值。

所以在一個假設的上下文

S是一個字符串 E是一個int

(S,E)=>

意味着在功能進一步的引用指的是那些相應對象按名稱s和e鍵入。

(S,E)=> s.Length + E

方式:得到其中s是指一個字符串的實例的值,並添加給它的實例的值int的到其中E指。