[問題] 我看不懂 => lambda

看板C_Sharp作者 (純潔)時間16年前 (2010/03/01 20:07), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/2 (看更多)
看了好久,還是搞不懂 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

03/01 20:28, , 1F
(s, e) => { } 是宣告一個匿名方法,()裡面是參數
03/01 20:28, 1F

03/01 20:31, , 2F
可以想成定義 someMethod(var s, var e) { },然後直接呼叫
03/01 20:31, 2F

03/01 22:11, , 3F
請問.... 什麼狀況下用這個比較好? 什麼狀況用這個會出問題?
03/01 22:11, 3F

03/01 22:13, , 4F
不知道該怎麼用,表是我自己還沒搞懂.... orz....
03/01 22:13, 4F

03/01 23:14, , 5F
我是想到如果有變數在兩個涵式間會共享到
03/01 23:14, 5F

03/01 23:15, , 6F
改成匿名方法就不用宣告成globe變數 是醬嗎
03/01 23:15, 6F

03/02 12:42, , 7F
orz不曉得能不能這樣用...
03/02 12:42, 7F

03/02 17:58, , 8F
真有深處的用法
03/02 17:58, 8F

03/02 18:06, , 9F
C#3.0才有...vs2005能用這種方法嗎?
03/02 18:06, 9F

03/02 19:58, , 10F
當你可以把函數表達成lambda式,就可以把函數當做參數給另一
03/02 19:58, 10F

03/02 19:58, , 11F
函數使用.
03/02 19:58, 11F

03/02 20:24, , 12F
謝謝各位的回答 努力理解中
03/02 20:24, 12F
文章代碼(AID): #1BYwu7pd (C_Sharp)
文章代碼(AID): #1BYwu7pd (C_Sharp)