Feb 16

LINQ学习笔记-Lambda表达式 不指定

zpgm , 13:43 , Asp.Net 2.0 , 评论(0) , 引用(0) , 阅读(398) , Via 本站原创 | |
一、什么时候使用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!";} );
Tags: , , , ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]