C#中()=>表达式有何作用?

问题

如题C#中() =>表达式有何作用,比如.

public ICommand AddCommand{  get    {    if (this.addCommand == null)          this.addCommand = new RelayCommand(() => this.AddPet(), () => this.CanAddPet());          return this.addCommand;    }}

解答:

是 .NET3.0以后的新特性 Lambda表达式,Lambda 表达式”是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包。

RelayCommand(() => this.AddPet(), () => this.CanAddPet());的意思可以翻译为

RelayCommand(参数一, 参数二);

参数一 :() => this.AddPet()

参数二 :() => this.CanAddPet()

() => this.AddPet() 的意思是 一个没有参数的方法,返回回 this.AddPet() 而这个返回值的类型不用指定 系统会自动判断答

同理 () => this.CanAddPet() 就是 一个没有参数的方法返回this.CanAddPet()

Lambda 表达式简单使用案例

将 lambda 表达式的输入参数括在括号中。使用空括号指定零个输入参数:

Action line = () => Console.WriteLine("aaa");//line() 结果:aaa

如果 lambda 表达式只有一个输入参数,则括号是可选的:

Func<double, double> cube = x => x * x * x;//cube(6);  结果:216

两个或更多输入参数使用逗号加以分隔:

Func<int, int, bool> testForEquality = (x, y) => x == y;//testForEquality(2,3);结果:false

有时,编译器无法推断输入参数的类型。可以显式指定类型,如下面的示例所示:

Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;//isTooLong(5,"aaaaaa"); 结果:true