@onclick =“(()=> SomeMethod(parameter))”

时间:2019-10-29 14:53:36

标签: lambda blazor .net-core-3.0

我正在寻找Blazor,但我对这个表情之以鼻。

 @onclick="(() => SomeMethod(parameter))"

我无法在任何地方找到/谷歌此表达式(我想是lambda)实际上在做什么。有人可以向我解释一下这一部分:() =>以及为什么在哪里使用它吗?

编辑:

上面和这个之间有什么区别

 @onclick="SomeMethod(parameter)"

3 个答案:

答案 0 :(得分:2)

() =>()基本上是lambda函数。

想象一下您有一个功能

delegate (int foo) { return foo*2};

可以将其重写为

(int foo)=>{return foo*2};

可以缩写为

 foo=>foo*2;

在这里,您的onlclick方法将执行SomeMethod,该方法将占用parameter

为什么要使用? 用于创建简单易用的事件处理程序,回调委托等。

参考

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

答案 1 :(得分:1)

选项一,lambda函数(匿名函数):

    @onclick="( ( ) => SomeMethod(parameter) ) "
       ^         ^     ^
       |         |     |
       (1)       (2)   (3)

当用户单击控件(1)时,将执行功能(2)。 (3)是函数(2)的主体。这是一个匿名函数,它没有名称,因为它只有括号:__no_name_function__ ( )

选项二,表达式:

    @onclick="SomeMethod(parameter)"
       ^             ^
       |             |
       (1)           (2)

当用户单击控件(1)时,将调用表达式(2)的结果。此函数应返回一个委托。

样本

blazorfiddle上玩这个示例,以便更好地理解它。

<h1>@parameter</h1>

<button @onclick="@(() => SomeMethod1(parameter))" >button 1</button>

<button @onclick="SomeMethod2(parameter)" >button 2</button>

<p>@theResult</p>

@code
{
    int parameter = 5;
    string theResult = "";

    void SomeMethod1(int p)
    {
        parameter++;
        theResult = $"SomeMethod1 called p={p}";
    }

    Action SomeMethod2(int p)
    {        
        return SomeAction;
    }

    void SomeAction()
    {
        theResult = $"Action called parameter={parameter}";
        parameter++;
    }
}

注意,这几乎是相同的:

<button @onclick="SomeMethod2(parameter)" >button 2</button>

比这个:

<button @onclick="SomeAction" >button 2</button>

答案 2 :(得分:0)

使用此模式:

<input type="button" value="Click me" @onclick="@(() => SomeMethod("my string"))" />

当您要调用方法并将其传递给参数时。在幕后,编译器创建一个EventCallback结构,该结构提供适当的委托类型,该委托类型封装具有单个参数的方法并返回void

当您要调用没有参数的方法时,请使用以下模式:

<input type="button" value="Click me" @onclick="@(SomeMethod1)" />

(not recommended, embedded in a Razor expression)

或者简单地使用最常见的用法:

<input type="button" value="Click me" @onclick="@SomeMethod1" />

这也是可能的:

<input type="button" value="Click me" @onclick="SomeMethod1" />

(这里不再需要 @ 标志,但是您可能会看到大多数开发人员都在使用它;出于习惯,因为过去这是必须的)

希望这对您有帮助...