15

有人可以解释这段 C# 代码在做什么吗?

// launch the camera capture when the user touch the screen
this.MouseLeftButtonUp += (s, e) => new CameraCaptureTask().Show();

// this static event is raised when a task completes its job
ChooserListener.ChooserCompleted += (s, e) =>
{
    //some code here
};

我知道CameraCaptureTask是一个类并且有一个公共方法Show()。这是什么活动?什么是(s, e)

4

5 回答 5

15

附加事件处理程序时,您可以通过三种不同的方式进行操作:

老式的详细方式:

this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;
void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e)
{
  new CameraCaptureTask().Show(); 
}

匿名方法

this.MouseLeftButtonUp += delegate(object s, MouseButtonEventArgs e) {
  new CameraCaptureTask().Show(); 
}

或者,使用lambda 表达式

this.MouseLeftButtonUp += (s, e) => new CameraCaptureTask().Show(); 

将最后一个想象成使用委托的“紧凑形式”。你也可以使用大括号:

this.MouseLeftButtonUp += (s, e) => {
  new CameraCaptureTask().Show(); 
}
于 2010-05-16T16:05:36.060 回答
12
(s, e) => new CameraCaptureTask().Show();

这是一个匿名委托(lambda 表达式)。这需要 2 个参数(se(未使用)),然后创建一个新的 CameraCaptureTask 并显示它。

于 2010-05-16T07:41:14.297 回答
2

Lambda 表示法,s代表sender, efor eventargs,事件的参数。

于 2010-05-16T07:42:07.870 回答
1
(s, e) => { }

是一个lambda 表达式。在这种情况下,它只是一种快速定义方法(内联方法)的方法,而无需在类中创建单独的方法。

于 2010-05-16T07:41:40.303 回答
0

如前所述,您看到的语法是 lambda 表达式。您在简单视图中的代码是以下内容的简写

this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;

void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e)
{
  new CameraCaptureTask().Show(); 
}

检查其他人给出的参考资料,Lambda 表达式提供的更多。

于 2010-05-16T15:52:34.100 回答