2014-12-28 95 views
0

我只是在玩匿名方法,我想知道爲什麼這段代碼不能編譯。 Messagebox顯示接受一個字符串,我試圖返回一個字符串。messagebox.show中的Lambda匿名方法

  MessageBox.Show(() => 
      { 
       if (button1.Text == "button1") 
       { 
        return "ok"; 
       } 
       else 
       { 
        return "not button1 text"; 
       } 
      }); 

無法將lambda表達式轉換爲類型字符串,因爲它不是委託類型。

有人可以解釋爲什麼嗎?我錯過演員?

+0

你不應該使用asp.net標記,因爲這篇文章與ASP .NET無關,MessageBox.Show是一個Winforms方法。一個lambda表達式標籤對你很好。 – msporek

回答

8

你的代碼段所做的是定義一個返回字符串(Func<string>)的Func。然後您嘗試將Func<string>作爲參數傳遞給MessageBox.Show。請注意,MessageBox.Show不接受Func<string>類型,它接受string,因此您無法以此方式將lamda表達式傳遞給它)。但你可以這樣做:

Func<string> yourFunc =() => 
      { 
       if (button1.Text == "button1") 
       { 
        return "ok"; 
       } 
       else 
       { 
        return "not button1 text"; 
       } 
      }; 

MessageBox.Show(yourFunc());