很抱歉要问所有人,但我是一个老手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);
}
};
如果有人能解释什么+ =(o,args)=>实际上,我会变得非常好......
非常感谢提前。 添答案 0 :(得分:27)
(o,args) =>
定义了一个lambda表达式,它带有两个名为o
和args
的参数。根据{{1}}的类型推断出这些参数的类型(如果PostCompleted
是PostCompleted
,那么它们将分别为EventHandler
和Object
类型)。表达式的主体紧跟在EventArgs
之后。
结果将作为处理程序添加到=>
。
因此,这是一种不那么冗长的写作方式:
PostCompleted
以下是:
的简写app.PostCompleted += delegate(object o, EventArgs args)
{
// ...
};
答案 1 :(得分:8)
这是使用lambda表达式为PostCompleted事件添加的处理程序。它类似于
app.PostCompleted += MyHandler;
// ...
private void MyHandler(object sender, EventArgs e) {
// ...
}
但是当使用lambda表达式时,你不能轻易地分离处理程序。
答案 2 :(得分:5)
它是为POST完成事件定义事件处理程序的委托的简写:
app.PostCompleted += delegate(object o, EventArgs args) {
// ...
};
答案 3 :(得分:3)
假设PostCompleted
是一个事件,你基本上是使用lambda表示法创建一个事件处理程序。
此代码剪辑相当于:
app.PostCompleted += delegate (o, args)
{
if (args.Error == null)
{
MessageBox.Show("Picture posted to wall successfully.");
}
else
{
MessageBox.Show(args.Error.Message);
}
};
答案 4 :(得分:3)
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#代码的唯一引用(因此是调用它的唯一方法)是通过事件订阅。
答案 5 :(得分:2)
(o,args) =>
部分是lambda expression,这是一个匿名函数。
+=
部分指定事件触发时要调用的lambda表达式。