可以在C#中同时声明和调用lambda表达式吗?

tro*_*man 26 c# lambda

在VB.NET中,可以在同一行声明和调用lambda表达式:

'Output 3
Console.WriteLine((Function(num As Integer) num + 1)(2))
Run Code Online (Sandbox Code Playgroud)

这可能在C#中吗?

Jon*_*eet 44

您必须告诉编译器特定的委托类型.例如,你可以 lambda表达式:

Console.WriteLine(((Func<int, int>)(x => x + 1))(2));
Run Code Online (Sandbox Code Playgroud)

编辑:或者是的,您可以根据Servy的答案使用委托创建表达式:

Console.WriteLine(new Func<int, int>(i => i + 1)(2));
Run Code Online (Sandbox Code Playgroud)

请注意,这不是真正正常的构造函数调用-它是委托创建其特殊的语法看起来像一个普通的构造函数调用.仍然很聪明:)

你可以把它稍微用的辅助类清洁剂:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

... 然后:

Console.WriteLine(Functions.Of<int, int>(x => x + 1)(2));
Run Code Online (Sandbox Code Playgroud)

要么:

Console.WriteLine(Functions.Of((int x) => x + 1)(2));
Run Code Online (Sandbox Code Playgroud)


Ser*_*rvy 33

Console.WriteLine(new Func<int, int>(i => i + 1)(2));
Run Code Online (Sandbox Code Playgroud)

使用少量括号来使用Func构造函数而不是强制转换.


BAC*_*CON 14

是的,虽然它很乱:

Console.WriteLine(((Func<int, int>) (num => num + 1))(2));
Run Code Online (Sandbox Code Playgroud)