我希望这不是一个愚蠢的问题,但有没有办法在C#中实现以下类型的东西?
int y = (x => x * x)(9);
我知道我可以这样做:
delegate int Transformer(int x);
Transformer square = x => x * x;
int y = square(9);
但有没有办法更简洁地做同样的事情?如果没有,是否有充分理由不这样做?
答案 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
委托,尽可能使用内置委托类型。)