我试图理解当给定参数在()中格式化时如何使用C#中的lambda运算符,如下所示:
_backgroundVideoWorker.DoWork += (s, e) =>
{
outputFile = _videoEditor.JoinVideo(selectedConfiguration, videoFiles);
};
我提出这个问题的主要目的是了解不同的运算符如何与lambda += (s, e) =>
一起使用。
作为参考,此代码摘录取自使用FFMPEG实用程序将两个视频文件连接在一起的应用程序。
答案 0 :(得分:1)
_backgroundVideoWorker.DoWork
是需要处理程序的事件。
+=
表示我们正在添加一个事件处理程序来处理该事件。
(s, e)
表示该表达式正在创建一个函数,该函数接受事件所需的s
和e
参数,以便函数处理它。它们代表一个对象(s
)和DoWorkEventArgs
(e
)。如果你要写一个完整的功能块而不是内联lambda,它们看起来像(object s, DoWorkEventArgs e)
或更熟悉的(object sender, DoWorkEventArgs e)
;
答案 1 :(得分:0)
BackgroudWorker.DoWork是一个委托类型为DoWorkEventHandler的事件,其中包含签名:
public delegate void DoWorkEventHandler(object sender, DoWorkEventArgs e)
这意味着DoWork将是一个接收两个参数的函数,分别为object
和DoWorkEventArgs
类型。
事件处理程序必须遵循与事件委托相同的签名,因此,当您将(s, e) => { /*..*/ }
指定为事件处理程序时,编译器将假定s
对应于object sender
参数,而e
对应DoWorkEventargs e
参数。当然,您不必将它们命名为s
和e