作者F23ko (純潔)
看板C_Sharp
標題[問題] 我看不懂 => lambda
時間Mon Mar 1 20:07:32 2010
看了好久,還是搞不懂 lambda這個東西....
http://msdn.microsoft.com/zh-tw/library/bb383984.aspx
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Use a lambda expression to define an event handler.
this.Click +=
(s, e) => {
MessageBox.Show(((MouseEventArgs)e).Location.ToString());
};
}
}
根據測試結果,這一段的功能等於
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Click += new System.EventHandler(this.點擊);
}
private void 點擊(object sender, EventArgs e)
{
MessageBox.Show(((MouseEventArgs)e).Location.ToString());
}
}
那(s,e)到底是幹什麼用的???
在前面完全沒宣告過這個東西.....
我又怎麼會知道,這到底是幹什麼用的?
再者,在逐行執行的時候,我看見編譯器會回頭執行委派中Lambda右邊運算式
這有點像method
但是Lambda中可以讀取外部變數,但是外部程式不能讀取Lambda中宣告的變數
我就不了解這到底是什麼鬼了.....
感覺起來有點像For之類的迴圈.....
但又不是迴圈.....
for (;;)
{
int Xi = 0;
}
Xi = 5; //編譯器會說Xi不存在.....
請問我該怎麼去理解、使用 => 這個東西?
--
◢
鄉民啊!鄉民! 請告訴我誰是最純潔的人!
◢█ │
PTT │
██
:就是你!Snow White F23ko!│
█◤ ╯
◤ ﹨(╯▽╰ )∕
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.27.109.77
→ ssccg: (s, e) => { } 是宣告一個匿名方法,()裡面是參數 03/01 20:28
→ ssccg:可以想成定義 someMethod(var s, var e) { },然後直接呼叫 03/01 20:31
→ F23ko:請問.... 什麼狀況下用這個比較好? 什麼狀況用這個會出問題? 03/01 22:11
→ F23ko:不知道該怎麼用,表是我自己還沒搞懂.... orz.... 03/01 22:13
推 FAITHY:我是想到如果有變數在兩個涵式間會共享到 03/01 23:14
→ FAITHY:改成匿名方法就不用宣告成globe變數 是醬嗎 03/01 23:15
→ F23ko:orz不曉得能不能這樣用... 03/02 12:42
→ Sany:真有深處的用法 03/02 17:58
推 Sany:C#3.0才有...vs2005能用這種方法嗎? 03/02 18:06
→ yauhh:當你可以把函數表達成lambda式,就可以把函數當做參數給另一 03/02 19:58
→ yauhh:函數使用. 03/02 19:58
→ F23ko:謝謝各位的回答 努力理解中 03/02 20:24