在C#中用单行创建和应用lambda

时间:2011-06-12 18:25:08

标签: c# c#-4.0

我希望这不是一个愚蠢的问题,但有没有办法在C#中实现以下类型的东西?

int y = (x => x * x)(9);

我知道我可以这样做:

delegate int Transformer(int x);
Transformer square = x => x * x;
int y = square(9);

但有没有办法更简洁地做同样的事情?如果没有,是否有充分理由不这样做?

2 个答案:

答案 0 :(得分:5)

因为lambda与委托类型没有关联,所以在定义lambda时需要指定委托类型,无论是在左侧还是在右侧。

这应该可以解决问题:

int result = new Transformer(x => x * x)(9);

同样的事情更简洁:

int x = 9;
int result = x * x;

答案 1 :(得分:4)

你可以这样做:

int y = ((Func<int,int>)(x => x * x))(9);

或使用它作为委托创建表达式:

int y = new Func<int,int>(x => x * x)(9);

虽然......但它并不是非常有用。

(我已使用Func<int, int>替代Transformer委托,尽可能使用内置委托类型。)