在VB.NET中,可以在同一行声明和调用lambda表达式:
'Output 3
Console.WriteLine((Function(num As Integer) num + 1)(2))
这在C#中是否可行?
答案 0 :(得分:44)
您必须告诉编译器特定的委托类型。例如,你可以施放 lambda表达式:
Console.WriteLine(((Func<int, int>)(x => x + 1))(2));
编辑:或者是的,您可以根据Servy的答案使用委托创建表达式:
Console.WriteLine(new Func<int, int>(i => i + 1)(2));
请注意,这不是真正正常的构造函数调用 - 它是委托创建的特殊语法,看起来像一样是常规构造函数调用。仍然很聪明:)
你可以使用辅助类使轻微更清洁:
public static class Functions
{
public static Func<T> Of<T>(Func<T> input)
{
return input;
}
public static Func<T1, TResult> Of<T1, TResult>
(Func<T1, TResult> input)
{
return input;
}
public static Func<T1, T2, TResult> Of<T1, T2, TResult>
(Func<T1, T2, TResult> input)
{
return input;
}
}
......然后:
Console.WriteLine(Functions.Of<int, int>(x => x + 1)(2));
或者:
Console.WriteLine(Functions.Of((int x) => x + 1)(2));
答案 1 :(得分:33)
Console.WriteLine(new Func<int, int>(i => i + 1)(2));
使用少量括号来使用Func
的构造函数而不是强制转换。
答案 2 :(得分:14)
是的,虽然它很乱:
Console.WriteLine(((Func<int, int>) (num => num + 1))(2));
答案 3 :(得分:1)
种类或者,你必须使用Func对象:
var square = new Func<double, double>(d => d*d)(2);
Console.WriteLine(square);