5 回答

TA貢獻1893條經驗 獲得超10個贊
Lambda表達式是C#3.0的新內容,如果您之前學習的C#2.0,不認識也就不奇怪了。
給您舉個例子。
例如,我定義一個委托:
delegate int Method(int a, int b);
再定義一個方法:
int Add(int a, int b)
{
return a + b;
}
我可能需要這樣通過委托調用方法:
Method m += Add;
Console.WriteLine(m(2, 3));
====================================================
但如果用 Lambda 表達式:
Method m += (a ,b) => a + b;
Console.WriteLine(m(2, 3));
可以省去方法的定義。
實際上, Lambda 表達式只是簡化了匿名方法的語法而已。
附 C# 2.0 的匿名方法語法:
Method m += delegate(int a, int b) { return a + b; };
Console.WriteLine(m(2, 3));

TA貢獻1798條經驗 獲得超7個贊
C#編譯器在后臺做了很多東西,匿名函數其實從簡單的介紹的話,是沒有名字的函數,更嚴格一些,匿名函數是閉包的一個實現,也就是C#通過蘭步達表達式(匿名函數)實現了閉包,通過閉包,可以改變局部變量的聲明周期,因此閉包有很多很特殊和奇妙的引用。

TA貢獻1812條經驗 獲得超5個贊
你的btn不是孤立的,它是作為一個窗體里的對象存在的
那么你是不是可以通過btn.Form之類的方法獲取到這個窗體,從而獲取到窗體里的相應屬性之類
如果不是公共的,可以通過反射來實現
RoutedEventHandler事件的參數是已經固定了的,就是Object sender, RoutedEventArgs e
所以你無法增加你需要的參數,
不過這個sender,就是觸發事件的對象,也就是那個btn,你可以變通一下,給那個btn的某些屬性賦值成你希望傳遞的參數,比如btn.Text = 參數
然后在:btn_Click方法里,把sender轉換為btn對象,并獲取text屬性
- 5 回答
- 0 關注
- 488 瀏覽
添加回答
舉報