[C# 3.0 入门] [第一章 Lambda表达式] 第四节:Lambda的用途 & 类型声明能够和不能够省略的情况
2010-09-30 20:59:48 来源:WEB开发网成问题的是,虽然为了源代码的简洁性,很想用Lambda表达式,但是要写的代码却不能全部都用Lambda表达式来写。
那么, Lambda表达式究竟能做到什么程度呢?
习惯了C/C++编程风格的程序员,一定以为因C#语法与之很相似,所以用C#编写相对复杂的程序应该也没有问题。可是很遗憾,情况不是这样。那是因为C/C++具有能写出复杂功能的表达式的逗号表达式,而C#却没有。
例如,C/C++中,下面的代码是可行的。
int a,b,c;
c = (a=1, b=2, a+b); // a=1、b=2、c=a + b
printf("%d\n",c);
正因为仅仅一个表达式就能做相当多的处理,所有逗号表达式才有着重要的意义。
但是,C#却没有这样的用法。
但是C#有三元运算符?:和空接合运算符??。通过使用这些运算符,相当数量的代码都可以用Lambda表达式来写了。
例如,“根据参数指定的文件名向文件中写入字符串,参数为null的情况下,用‘default.txt’作为默认文件名”这样的Lambda表达式,像下面那样,用空接合运算符??就可以用Lambda表达式来写。
using System;
class Program
{
static void Main(string[] args)
{
Action<string> method =
(filename) => System.IO File.WriteAllText(
filename ?? "default.txt", "Hello!");
method(null); // 生成default.txt
method("hello.txt"); // 生成hello.txt
}
}
List11 使用了空接合运算符??的Lambda表达式
或者“参数的flag如果是false的话,文件名就是‘normal.log’,true的话就是‘system.log’”的情况下,使用三元运算符(?:)按照如下的方式以表达式形式的Lambda来写。
赞助商链接