使用C#Lambda运算符

时间:2018-02-16 15:22:02

标签: c# .net lambda ffmpeg

我试图理解当给定参数在()中格式化时如何使用C#中的lambda运算符,如下所示:

_backgroundVideoWorker.DoWork += (s, e) => 
       { 
           outputFile = _videoEditor.JoinVideo(selectedConfiguration, videoFiles); 
       };

我提出这个问题的主要目的是了解不同的运算符如何与lambda += (s, e) =>一起使用。

作为参考,此代码摘录取自使用FFMPEG实用程序将两个视频文件连接在一起的应用程序。

2 个答案:

答案 0 :(得分:1)

_backgroundVideoWorker.DoWork是需要处理程序的事件。

+=表示我们正在添加一个事件处理程序来处理该事件。

(s, e)表示该表达式正在创建一个函数,该函数接受事件所需的se参数,以便函数处理它。它们代表一个对象(s)和DoWorkEventArgse)。如果你要写一个完整的功能块而不是内联lambda,它们看起来像(object s, DoWorkEventArgs e)或更熟悉的(object sender, DoWorkEventArgs e);

答案 1 :(得分:0)

BackgroudWorker.DoWork是一个委托类型为DoWorkEventHandler的事件,其中包含签名:

public delegate void DoWorkEventHandler(object sender, DoWorkEventArgs e)

这意味着DoWork将是一个接收两个参数的函数,分别为objectDoWorkEventArgs类型。

事件处理程序必须遵循与事件委托相同的签名,因此,当您将(s, e) => { /*..*/ }指定为事件处理程序时,编译器将假定s对应于object sender参数,而e对应DoWorkEventargs e参数。当然,您不必将它们命名为se