Type: Note
Intro
咱是把它歸類為一個好用的撰寫方法雖然並非必要, 但 不用它, 會累死人
x => x * x () => Console.WriteLine("no parameter function"); (int x, string s) => s.Length > x在 C# 裡看到這些的話, 都是 lambda
Context
MSDN開宗明意: lambda 運算式是匿名函式,可用來建立委派或運算式樹狀架構類型。如下所示, way-1 是不使用 lambda, 會多寫一個方法, way-2 可以少寫一個
各位看倌可能會覺得多一個少一個沒什麼差, 但多一百個跟少一百個就差很多了:)
尤其是在用別人的library時, 就是想要方便點, 卻要預先宣告一堆東西
最糟的是, 如果整個程式只出現一次!? 所以匿名工作很重要喔
delegate int del(int i); static int square(int i) { return i * i; } static void Main(string[] args) { //way-1 del myDelegate = square; Console.WriteLine(myDelegate(5)); //j = 25 //way-2 myDelegate = x => x * x * x; Console.WriteLine(myDelegate(5)); Console.ReadKey(); }
來個簡單的例子, 你需要一個thread做事
static void Main(string[] args) { var thd = new System.Threading.Thread( delegate(){ for (int i = 0; i < 10; i++) { Console.WriteLine("i= "+i); } } ); thd.Start(); Console.ReadKey(); }thread裡面那段程式, 好死不死的, 只會在整個程式中出現一次
何不輕鬆寫在這就好了呢~
再稍微看一下撰寫方式
"x => x * x * x" 可以寫成 "(int x) => x * x * x;"
傳入參數只有一個時, 可以省略小括號
當然就可以寫成 () => Console.WriteLine("no parameter function");
講到這邊, 不得不介紹兩個好用的泛型委派 Action 和 Func
Action 是給 void I_am_a_action() 使用, 沒傳入值也沒回傳值, 僅僅只是動作
Func<byte, char> 是指 char byteToChar(byte b) 使用
static void Main(string[] args) { Action act = () => Console.WriteLine("I am a action"); Func有這兩個, 大部份的委派都可以不用寫了~byteToChar = (byte b) => (char)b; act(); Console.WriteLine(byteToChar(97)); Console.ReadKey(); }
有沒有很好用!XD
運算式的寫法 "x => x * x" 是自動將整個式子的運算結果回傳的
如果想寫陳述式, 就是一行行的code, 就改成大括號
FuncbyteToChar = (byte b) => { return (char)b; };
沒有留言:
張貼留言