[C# 3.0 入门] [第一章 Lambda表达式] 第五节:Lambda表达式的使用范例 & Lambda表达式的各种变体
2010-09-30 20:59:45 来源:WEB开发网【短评】“=>”是不等号?
BASIC系的语言中,不等号的写法,“=”与“>”的顺序没有明确的规定。这样的语言中,“>=”“=>”是等价的。正因为如此,熟悉了这样的语言的话“=>运算符”就很容易会被误认为是不等号。
例如如果有下面的Lambda表达式,如果是有上述语言的使用经验的人看来,很容易就认为是不等号了。
x => 0
但是,使用Visual Basic的IDE的程序员,几乎就不会看见作为不等号的“=>”。因为在IDE中输入“=>”时,当场就会被自动替换为“>=”(Visual Basic 6.0与Visual Studio 2008会要求确认)
所以综合起来考虑,如果是使用会把“=>”与不等号搞混的编程语言,那最好就要养成良好的编程习惯。
Lambda表达式的各种变体
Lambda表达式有各种变体。特别是在参数只有一个的情况下,因为在语法上可以省略参数两边的括弧,全面把握起来会比较困难。所以,下面的代码给出几种主流的变体的写法。
1using System;
2
3delegate int NoArg();
4delegate int OneArg(int onlyOne);
5delegate int TowArgs(int first, int second);
6delegate void NoRetVal();
7
8class Program
9{
10 static void Main(string[] args)
11 {
12 NoArg sample1 = () => 0;
13 OneArg sample2 = (x) => x * 2;
14 OneArg sample3 = (int x) => x * 2;
15 OneArg sample4 = x => x * 2;
16 TowArgs sample5 = (x, y) => x * y;
17 TowArgs sample6 = (int x, int y) => x * y;
18 OneArg sample7 = (x) => { return x * 2; };
19 OneArg sample8 = (int x) => { return x * 2; };
20 NoRetVal sample9 = () => Console.WriteLine("Hello!");
21 }
22}
23
List20 Lambda表达式的各种变体
sample1 = () => 0
在写没有参数的Lambda表达式的时候,要写上没有参数的空的括号。
sample2 = (x) => x * 2
有参数的情况下,用括号把参数表括上是最基本的写法。
sample3 = (int x) => x * 2
当然,如果能够明确指定参数的类型更好。
sample4 = x => x * 2
仅当参数只有一个的时候,参数两边的括弧可以省略。
sample5 = (x, y) => x * y
参数有多个的时候,用逗号分隔
sample6 = (int x, int y) => x * y
参数有多个的时候,也可以指定类型
sample7 = (x) => { return x * 2; }
Lambda语句的例子
sample8 = (int x) => { return x * 2; }
Lambda语中也可以指定类型
sample9 = () => Console.WriteLine("Hello!")
没有返回值的情况,写成调用void型返回值的方法的形式。
下期预告
介绍到这里,Lambda表达式的大部分内容已经介绍过了。仅仅运用本章的知识,就能够使代码发生很大的质的变化了。
然而,如果说要完全理解了Lambda表达式的话,仅仅这样的话还为时尚早。
实际上,推断被省略了的类型声明的“类型推断”的麻烦事还在后头呢。下一章,就来说说类型推断。同时,也将会讨论一下使用Lambda表达式的代理类型在类库中的使用方法。例如,本章中的例子里就用到了Action类型和Func类型。
更多精彩
赞助商链接