+= (0, arg) =>真正实现
本文关键字:实现 arg | 更新日期: 2023-09-27 18:03:29
很抱歉问大家,但我是一个Vb.net老手,正在转到c#。我有下面一段代码,似乎激活时(在这种情况下)postAsync方法被触发。我只是不明白代码在做什么(如下所示):-
app.PostCompleted +=
(o, args) =>
{
if (args.Error == null)
{
MessageBox.Show("Picture posted to wall successfully.");
}
else
{
MessageBox.Show(args.Error.Message);
}
};
如果有人能解释一下+= (0,args) =>实际上是什么,我会非常感激....
提前感谢。蒂姆。
(o,args) =>
定义了一个lambda表达式,它接受两个名为o
和args
的参数。这些参数的类型是根据PostCompleted
的类型来推断的(如果PostCompleted
是EventHandler
,那么它们分别是Object
和EventArgs
的类型)。然后,表达式体紧跟在=>
之后。
结果将作为处理程序添加到PostCompleted
。
app.PostCompleted += delegate(object o, EventArgs args)
{
// ...
};
是
的简写void YourHandler(object o, EventArgs args)
{
// ...
}
// ...
app.PostCompleted += YourHandler;
这是使用lambda表达式为PostCompleted事件添加的处理程序。它类似于
app.PostCompleted += MyHandler;
// ...
private void MyHandler(object sender, EventArgs e) {
// ...
}
但是当使用lambda表达式时,您不能轻易地分离处理程序。
这是定义POST完成事件的事件处理程序的委托的简写:
app.PostCompleted += delegate(object o, EventArgs args) {
// ...
};
参见匿名方法。
假设PostCompleted
是一个事件,您基本上是使用lambda符号创建一个事件处理程序。
这段代码相当于:
app.PostCompleted += delegate (o, args)
{
if (args.Error == null)
{
MessageBox.Show("Picture posted to wall successfully.");
}
else
{
MessageBox.Show(args.Error.Message);
}
};
vb.net的等效代码是这样的:
AddHandler app.PostCompleted, Function(o, args)
''# ...
End Function
注意,这需要Visual Studio 2010/。Net 4,但是c#代码可以在Visual Studio 2008/中工作。Net 3.5。
但这只是部分正确。在c#中,这是在一个地方将方法定义为事件处理程序的一种方式。在VB。Net中,您可以使用Handles
关键字,因此实际等效的内容可能更像这样:
Public Sub App_PostCompleted(ByVal Sender as Object, ByVall e As EventArgs) Handles app.PostCompleted
''#
End Sub
但这也不是完全等价的,因为你给了方法一个名字,可以在任何地方调用它。对c#代码的唯一引用(因此也是调用它的唯一方法)是通过事件订阅。
(o,args) =>
部分是lambda表达式,是一个匿名函数。
+=
部分指定事件触发时要调用的lambda表达式。