博客园  :: 首页  :: 联系 :: 管理

LINQ学习笔记-Lambda表达式

Posted on 2008-01-17 16:30  sunrack  阅读(1212)  评论(0编辑  收藏  举报
一、什么时候使用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;
});

二、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);

应该这样来理解
// 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));

可以显式指定输入参数的类型
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;
});

当输入参数有多个时
SimpleMath m = new SimpleMath();
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);});
 
当没有输入参数时
VerySimpleDelegate d = new VerySimpleDelegate( () => {return "Enjoy your string!";} );