Type: Note
Intro
咱是把它歸類為一個好用的撰寫方法雖然並非必要, 但 不用它, 會累死人
x => x * x
() => Console.WriteLine("no parameter function");
(int x, string s) => s.Length > x
在 C# 裡看到這些的話, 都是 lambdaContext
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; };
沒有留言:
張貼留言