如何将此C#2委托示例转换为C#3 lambda语法?

如何将此C#2委托示例转换为C#3 lambda语法?,c#,lambda,C#,Lambda,我有一个例子,其中我转换了一个C#2代理例子: Predicate<string> predicate2 = delegate(string n) { return n.StartsWith("J"); }; IList<string> namesWithJ2 = Tools.Filter(names, predicate2); Tools.Dump(namesWithJ2); 但是如何将其转换为lambda语法呢?特别是,如何使用“=>”传递两个参数(对象s


我有一个例子,其中我转换了一个C#2代理例子:

Predicate<string> predicate2 = delegate(string n)
{
    return n.StartsWith("J");
};
IList<string> namesWithJ2 = Tools.Filter(names, predicate2);
Tools.Dump(namesWithJ2);

但是如何将其转换为lambda语法呢?特别是,如何使用“=>”传递两个参数(对象s,DoWorkEventArgs args)

\u worker.DoWork+=委托(对象s,DoWorkEventArgs args)
{
BackgroundWorker worker=s作为BackgroundWorker;
对于(int i=0;i<10;i++)
{
if(工作人员取消挂起)
{
args.Cancel=true;
返回;
}
睡眠(1000);
工人进度报告(i+1);
}
};
或者,如果编译器无法确定s和arg的确切类型:

_worker.DoWork += (object s, DoWorkEventArgs args) => {
    ....
};

表格的大纲如下所示

_worker.DoWork += (s, args) => {body of method};

编译器建议的其他标点符号

lambda应该用作表达式,因为它会编译成表达式树,我认为使用lambda没有任何好处。你为什么不把它作为匿名方法呢?我不一定同意尤萨林的观点。我认为lambdas应该用于表达式,因为它们使代码更具可读性。但就我个人而言,需要花括号的lambda并不能使代码更具可读性,而且我认为这是一种代码味道。班卓尔,所以你同意我的观点:)(明确一点:这是我对lambda的滥用)
_worker.DoWork += (s, args) => {
    ....
};
_worker.DoWork += (object s, DoWorkEventArgs args) => {
    ....
};
_worker.DoWork += (s, args) => {body of method};