一、什么时候使用Lambda表达式
总的来说,Lambda 表达式可以用在任何需要使用匿名方法,或是代理的地方。编译器会将Lambda表达式编译为标准的匿名方法(可以使用ildasm.exe or reflector.exe得到确认)。
比如:
被编译为
二、Lambda表达式的解读
Lambda表达式的写法
比如
应该这样来理解
可以显式指定输入参数的类型
可以使用括号把输入参数和表达式括起来,如果参数或处理表达式只有一个,可以省略括号
有多行处理表达式时,需要使用花括号包起来
当输入参数有多个时
或者显式指定输入参数类型
当没有输入参数时
总的来说,Lambda 表达式可以用在任何需要使用匿名方法,或是代理的地方。编译器会将Lambda表达式编译为标准的匿名方法(可以使用ildasm.exe or reflector.exe得到确认)。
比如:
List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);
被编译为
List<int> evenNumbers = list.FindAll(delegate (int i)
{
return (i % 2) == 0;
});
{
return (i % 2) == 0;
});
二、Lambda表达式的解读
Lambda表达式的写法
ArgumentsToProcess => StatementsToProcessThem
比如
// "i" is our parameter list.
// "(i % 2) == 0" is our statement set to process "i".
List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);
// "(i % 2) == 0" is our statement set to process "i".
List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);
应该这样来理解
// My list of parameters (in this case a single integer named i)
// will be processed by the expression (i % 2) == 0.
List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));
// will be processed by the expression (i % 2) == 0.
List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));
可以显式指定输入参数的类型
List<int> evenNumbers = list.FindAll((int i) => (i % 2) == 0);
可以使用括号把输入参数和表达式括起来,如果参数或处理表达式只有一个,可以省略括号
List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));
有多行处理表达式时,需要使用花括号包起来
List<int> evenNumbers = list.FindAll((i) =>
{
Console.WriteLine("value of i is currently: {0}", i);
bool isEven = ((i % 2) == 0);
return isEven;
});
{
Console.WriteLine("value of i is currently: {0}", i);
bool isEven = ((i % 2) == 0);
return isEven;
});
当输入参数有多个时
SimpleMath m = new SimpleMath();
m.SetMathHandler((msg, result) =>
{Console.WriteLine("Message: {0}, Result: {1}", msg, result);});
m.SetMathHandler((msg, result) =>
{Console.WriteLine("Message: {0}, Result: {1}", msg, result);});
或者显式指定输入参数类型
m.SetMathHandler((string msg, int result) =>
{Console.WriteLine("Message: {0}, Result: {1}", msg, result);});
{Console.WriteLine("Message: {0}, Result: {1}", msg, result);});
当没有输入参数时
VerySimpleDelegate d = new VerySimpleDelegate( () => {return "Enjoy your string!";} );