看板 C_Sharp 關於我們 聯絡資訊
看了好久,還是搞不懂 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