Lambda @onclick=";(()=>;SomeMethod(parameter))”;

Lambda @onclick=";(()=>;SomeMethod(parameter))”;,lambda,blazor,.net-core-3.0,Lambda,Blazor,.net Core 3.0,我正在调查Blazor,我结结巴巴地说: @onclick="(() => SomeMethod(parameter))" 我在任何地方都找不到/google这个(我猜lambda)表达式实际上在做什么。谁能给我解释一下这部分:()=>,为什么要用它,在哪里 编辑: 上述内容与此有何区别: @onclick="SomeMethod(parameter)" ()=>()基本上是一个lambda函数 假设你有一个函数 delegate (int foo) { return foo*2}

我正在调查Blazor,我结结巴巴地说:

 @onclick="(() => SomeMethod(parameter))"
我在任何地方都找不到/google这个(我猜lambda)表达式实际上在做什么。谁能给我解释一下这部分:
()=>
,为什么要用它,在哪里

编辑:

上述内容与此有何区别:

 @onclick="SomeMethod(parameter)"
()=>()
基本上是一个lambda函数

假设你有一个函数

delegate (int foo) { return foo*2};
这可以改写为

(int foo)=>{return foo*2};
可以缩短为

 foo=>foo*2;
在这里,您的
onclick
方法执行
SomeMethod
,它接受一个
参数

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

参考文献

()=>()
基本上是一个lambda函数

假设你有一个函数

delegate (int foo) { return foo*2};
这可以改写为

(int foo)=>{return foo*2};
可以缩短为

 foo=>foo*2;
在这里,您的
onclick
方法执行
SomeMethod
,它接受一个
参数

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

参考文献

选项一,lambda函数(匿名函数): 当用户单击控件(1)时,将执行功能(2)。(3) 是函数(2)的主体。这是一个匿名函数,它没有名字,因为它只有括号:
\uuuu no\u name\u function\uuu()

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

样品 在上玩一下这个示例,以便更好地理解它

<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++;
    }
}
@参数
按钮1
按钮2
@结果

@代码 { int参数=5; 字符串theResult=“”; void SomeMethod1(int p) { 参数++; theResult=$“SomeMethod1调用了p={p}”; } 动作2(INTP) { 返回一些动作; } 无效动作 { theResult=$“调用参数的操作={parameter}”; 参数++; } }
请注意,与此几乎相同:

<button @onclick="SomeMethod2(parameter)" >button 2</button>
按钮2
除此之外:

<button @onclick="SomeAction" >button 2</button>
按钮2
选项一,lambda函数(匿名函数): 当用户单击控件(1)时,将执行功能(2)。(3) 是函数(2)的主体。这是一个匿名函数,它没有名字,因为它只有括号:
\uuuu no\u name\u function\uuu()

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

样品 在上玩一下这个示例,以便更好地理解它

<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++;
    }
}
@参数
按钮1
按钮2
@结果

@代码 { int参数=5; 字符串theResult=“”; void SomeMethod1(int p) { 参数++; theResult=$“SomeMethod1调用了p={p}”; } 动作2(INTP) { 返回一些动作; } 无效动作 { theResult=$“调用参数的操作={parameter}”; 参数++; } }
请注意,与此几乎相同:

<button @onclick="SomeMethod2(parameter)" >button 2</button>
按钮2
除此之外:

<button @onclick="SomeAction" >button 2</button>
按钮2
使用此模式:

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

(not recommended, embedded in a Razor expression)

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

如果要调用没有参数的方法,请使用以下模式:

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

(not recommended, embedded in a Razor expression)

(不推荐,嵌入在Razor表达式中)
或者简单地使用最常见的用法:

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

这也是可能的:

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

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

希望这有助于……

使用此模式:

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

(not recommended, embedded in a Razor expression)

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

如果要调用没有参数的方法,请使用以下模式:

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

(not recommended, embedded in a Razor expression)

(不推荐,嵌入在Razor表达式中)
或者简单地使用最常见的用法:

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

这也是可能的:

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

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


希望这有帮助……

为什么我不能直接使用它:“@onclick=“SomeMethod(parameter)”?onclick是一个事件处理程序,它需要一个委托,而不是函数的结果。好的,但是在Blazor中,如果我现在有@onclick=“MyMethod”,那么它就会触发我的方法。我刚刚测试过。所以我仍然不确定什么时候使用MyMethod是一个函数。请尝试此MyMethod()。不会的。为什么我不能直接使用它:“@onclick=“SomeMethod(parameter)”?onclick是一个事件处理程序,它需要一个委托,而不是函数的结果。好的,但是在Blazor中,如果我现在有@onclick=“MyMethod”,那么它就会触发我的方法。我刚刚测试过。所以我仍然不确定什么时候使用MyMethod是一个函数。请尝试此MyMethod()。它不会。@onclick=“@(()=>SomeMethod(“我的字符串”)”-->这将不会在VS的语法中得到验证。我得到的错误是:@onclick=“@(()=>SomeMethod(“我的字符串”)”)-->这不会在VS语法中得到验证。我得到的错误是: