问题
如题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