[C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别
2010-09-30 20:59:51 来源:WEB开发网其次,return这个关键字,因为Lambda表达式本身就是“表达式”,所有旧没有必要再return了(如果是代码段的话,就又需要return了,后面详述)。例如:
int method() { return 1 + 2; }
这种情况下return还需要。但这种情况:
1 + 2
就不需要再return了。这里去掉return,又减去6个字符。(大汗)
参数类型不需要指定了,有些人可能会担心对于类型检查是不是太草率了,有人可能会窃喜不用再费事去声明类型了,切实这两种人都错了。List 9,Calculate方法的参数是SampleDelegate类型的,SampleDelegate代理的参数是2个int类型的,已经声明过了。所以不用再一次声明,x和y已经可以确定是int类型了。
这里再补充一点,这些其实都不是Lambda表达式所特有的。匿名方法虽确实需要显式的把参数类型写上,返回值的类型却采用了同样方法来推断。反过来说,如果不能够进行这样的推断,那么匿名方法和Lambda表达式都不能使用。类型不确定的场合下,是不能够使用的。这一点要记住。
接下来是中括号{ }和行尾的分号;的省略,其理由其实和return的理由是一样的,因为Lambda表达式本身就是表达式(相反,加上中括号{ }的就是“Lambda语句”,后文详述)。
OK,讲完收功。没什么神奇的,也不损失严密性,但其实现的代码缩短能力却是压倒性的。
Lambda语句(日本人叫Statement型Lambda)
到目前为止见到的Lambda表达式,都是“表达式型的Lambda”。因为其都是按表达式的方法写的而得名。
另外,还有一种内容按语句方式写的“Lambda语句”。它不是简单的表达式。如果要把较长代码写入Lambda的话还是Lambda语句好用。书写方式也简单,就是用中括号括起来就行了。
以下是一个例子:
using System;
class Program
{
static void Main(string[] args)
{
// Lambda语句
Action<string> method = (filename) =>
{
if (filename == null)
Console.WriteLine("Hello!");
else
System.IO.File.WriteAllText(filename, "Hello!");
};
method(null); // 输出:Hello!
method("hello.txt"); // 生成hello.txt文件
}
}
Lambda语句有返回值得情况下就使用return。例如,下面的Lambda表达式换做Lambda语句的话:
表达式形式的Lambda
(n) => a == n;
语句形势的Lambda
(n) => { return a == n; };
这个一看就明白了,文字上长了不少。但是,不能写Lambda表达式,只能用Lambda语句的情况下,仅一个return的增加这样的开销还是能够接受的。
更多精彩
赞助商链接