C#基础之Lambda表达式⽤法实例教程
这篇⽂章主要介绍了C#中Lambda表达式⽤法,并与之前所述的匿名⽅法做⼀⽐较,详细的讲述了Lambda表达式的定义及具体⽤法,需要的朋友可以参考下。
本⽂以实例形式介绍了C#中Lambda表达式的⽤法,分享给⼤家供⼤家参考之⽤。具体如下:
writeline教程从委托的⾓度来看,Lambda表达式与匿名⽅法没有区别。在前⾯⼀⽂中,我们使⽤了匿名⽅法来调⽤List<T>的FindAll⽅法。从C# 3.0开始,在使⽤匿名⽅法的地⽅,完全可以⽤Lambda表达式来代替。Lambda表达式的定义⽅式为:“([参数列表]) => 表达式”。运算符“=>”是⼀种与赋值运算“=”具有相同优先级的右结合运算符,在英语⾥读作:“goes to”。
现在回过头来看我们的例⼦。下⾯的代码与之前⼀⽂中的代码具有相同的效果:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24class Program
{
static void Main(string[] args)
{
List<string> names = new List<string>(); names.Add("Sunny Chen");
names.Add("Kitty Wang");
names.Add("Sunny Crystal");
List<string> found = names.FindAll
(
// Lambda Expression Implementation name => name.StartsWith( "sunny",
StringComparison.OrdinalIgnoreCase) );
if(found != null)
{
foreach(string str in found) Console.WriteLine(str);
}
}
}
上⾯的Lambda Expression Implementation在效果上与匿名⽅法没有任何区别,“=>”左边的name定义了参数(当参数个数为1的时候,圆括号可以省略),“=>”右边定义执⾏体。由于C# 3.0编译器具有Type Inference的能⼒,参数类型与返回值都将由编译器通过上下⽂判定,因此与匿名⽅法不同,Lambda表达式的参数可以不给定参数类型。当所表⽰的匿名⽅法没有任何参数时,Lambda表达式也同样可以使⽤,只需在“=>”左边⽤⼀对圆括号表⽰即可。即:
1() => Console.WriteLine("Hello!");
事实上,“Lambda表达式”这⼀词⽐较笼统,事实上“=>”运算符既可以表⽰Lambda表达式,也可以表⽰Lambda语句。Lambda语句由代码块组成,形式上很像匿名⽅法。请看下⾯的例⼦:
1
2 3 4 5 6 7 8 9 10 11 12class Program
{
static void Main(string[] args)
{
// Lambda 表达式
Func<int, bool> dele1 = n => n > 10;
// Lambda 语句
Func<int, bool> dele2 = (int n) => { return n > 10; }; Console.WriteLine(dele1(16));
Console.WriteLine(dele1(8));
}
}
两种定义⽅法同样可以正确地输出结果。请注意,当我们希望构建表达式树的时候,情况却完全不同了:
1 2 3 4// ok
Expression<Func<int, bool>> expr1 = n => n > 10;
// error: cannot converted to an expression tree
Expression<Func<int, bool>> expr2 = (int n) => { return n > 10; };
由此可见,在构建表达式树的时候,不能⽤Lambda语句(带有代码语句的Lambda表达式),⽽应该使⽤Lambda表达式。从这⾥就可以看
出匿名⽅法与Lambda表达式的区别了。
相信本⽂所述对⼤家C#程序设计的学习有⼀定的借鉴价值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论