@onclick="(() => SomeMethod(参数))"

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

我正在调查 Blazor,我无意中发现了这个表达式:

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

我无法 find/google 这个(我猜是 lambda)表达式实际上在做什么。谁能解释一下这部分:() => 以及为什么要使用它以及在哪里使用它?

编辑:

上面和这个有什么区别:

 @onclick="SomeMethod(parameter)"

() =>() 基本上是一个 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

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

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

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

选项二,表达式:

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

当用户点击控件 (1) 时,将调用表达式 (2) 的结果。这个函数应该 return 一个委托。

样本

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>

使用此模式:

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

当您想调用方法并向其传递参数时。在后台,编译器创建了一个 EventCallback 结构,它提供了适当的委托类型,该委托类型封装了一个方法,该方法具有单个参数和 returns 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" />

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

希望这对您有所帮助...