WEB开发网
开发学院软件开发C语言 [C# 3.0 入门] [第一章 Lambda表达式] 第三节:La... 阅读

[C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别

 2010-09-30 20:59:51 来源:WEB开发网   
核心提示: 其次,return这个关键字,[C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别(2),因为Lambda表达式本身就是“表达式”,所有旧没有必要再return了(如果是代码段的话,不能写Lambda表达式,只能用Lambda语句的

其次,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的增加这样的开销还是能够接受的。

上一页  1 2 

Tags:入门 第一章 Lambda

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接