我正在寻找Blazor,但我对这个表情之以鼻。
@onclick="(() => SomeMethod(parameter))"
我无法在任何地方找到/谷歌此表达式(我想是lambda)实际上在做什么。有人可以向我解释一下这一部分:() =>
以及为什么在哪里使用它吗?
编辑:
上面和这个之间有什么区别
@onclick="SomeMethod(parameter)"
答案 0 :(得分:2)
() =>()
基本上是lambda函数。
想象一下您有一个功能
delegate (int foo) { return foo*2};
可以将其重写为
(int foo)=>{return foo*2};
可以缩写为
foo=>foo*2;
在这里,您的onlclick
方法将执行SomeMethod
,该方法将占用parameter
为什么要使用? 用于创建简单易用的事件处理程序,回调委托等。
参考
答案 1 :(得分:1)
@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" />
(这里不再需要 @ 标志,但是您可能会看到大多数开发人员都在使用它;出于习惯,因为过去这是必须的)
希望这对您有帮助...