[C# 3.0 入门] [第一章 Lambda表达式] 第四节:Lambda的用途 & 类型声明能够和不能够省略的情况
2010-09-30 20:59:48 来源:WEB开发网什么都不做的Lambda表达式
这个话题说到此,还有盲点。这里先说明一下什么都不做的Lambda表达式的写法。
Lambda表达式没有返回值的情况(void的情况),想使其内容为空的情况下(调用后什么也不执行的Lambda表达式选择使用的情况),可以使用内容为空的Lambda语句。
例如,下面这个的Lambda表达式:
(x) => { };
这样用Lambda表达式重构,解决了“引入了null值对象”的问题。一句话,不应该用null表示什么也不做的表达式,而是采用调空Lambda表达式的手法。
简单的说,分别用代码来展示能够使用和不能够使用这个技术的场合。
首先,说说不能够使用该技术的场合。下面的代码,因为什么也不需要处理,所以用null值表示的例子。Sample方法的参数action,仅在值不为null的情况下被调用。
using System;
class Program
{
private static void Sample(Action<string> action)
{
if (action != null) action("Hello!");
}
static void Main(string[] args)
{
Action<string> action = null;
Sample(action);
action = (x) => Console.WriteLine(x);
Sample(action); // 输出:Hello!
}
}
List 16 执行时没什么可处理的情况下用null表示的例子
相反,下面的代码,在没什么要执行的情况下,要使用空Lambda表达式表示的情况。没必要判定Sample方法的参数action是否为null。如果需要处理的内容不存在的情况下,仅仅用空的Lambda表达式来执行,什么也不做就返回。
using System;
class Program
{
private static void Sample(Action<string> action)
{
action("Hello!");
}
static void Main(string[] args)
{
Action<string> action = (x) => { };
Sample(action);
action = (x) => Console.WriteLine(x);
Sample(action); // 输出:Hello!
}
}
List 17 没什么可处理的情况下用空表达式的例子
这样的“什么也不做的Lambda表达式(或是以前的匿名方法)”,是笔者经常使用的技术。
例如,现在正在写的程序,具有用户的操作用报表的形式回放的功能,通过该功能进行自动测试。这个时候,回放中与输出有关的处理会全部禁用,以提高其运行效率。这些操作的实现,并不需要具有输出功能的方法对条件进行一个一个的判断,只要用“空Lambda表达式(匿名方法)”就行了。因此,源代码仍然能够维持其简洁,成功实现了随时都能够执行的自动测试效率的目的。
更多精彩
赞助商链接