Define a lambda function and execute it immediately

前端 未结 2 1185
粉色の甜心
粉色の甜心 2021-02-08 13:30

I\'m defining a lambda and calling it, by appending \"()\", immediately.

Try:

int i = (() => 0) ();

Error:

Er

相关标签:
2条回答
  • 2021-02-08 14:06

    A lambda just does not support being executed. A delegate supports being executed. A lambda expression can be implicitly converted to a delegate type. In case no such conversion is requested there is no "default" delegate type. Since .NET 2 we normally use Action and Func for everything but we could use different delegate types.

    First convert to a delegate, then execute:

    ((Func<int>)(() => 0))()
    

    One could argue that C# should default to using Action and Func if nothing else was requested. The language does not do that as of C# 5.

    0 讨论(0)
  • 2021-02-08 14:20

    You're not "defining a lambda".. you're wrapping parenthesis around what you think is one.

    The compiler doesn't infer this type of thing. It needs context. You give it context by assigning or casting the representation of the lambda to a delegate type:

    Func<int> f = () => 0;
    int i = f();
    

    Thats clear context. If you want an unclear one.. this sort of thing also works:

    int i = ((Func<int>)(() => 0))();
    
    0 讨论(0)
提交回复
热议问题