代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

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

  •  0
  • Edward Tanguay  · 技术社区  · 16 年前


    我有一个例子,我把 代表示例:
    Predicate<string> predicate2 = delegate(string n)
    {
        return n.StartsWith("J");
    };
    IList<string> namesWithJ2 = Tools.Filter(names, predicate2);
    Tools.Dump(namesWithJ2);
    

    C#3 lambda语法示例:

    var filteredNames = Tools.Filter(names, n => n.StartsWith("J"));
    Tools.Dump(filteredNames);
    

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

    _worker.DoWork += delegate(object s, DoWorkEventArgs args)
    {
        BackgroundWorker worker = s as BackgroundWorker;
        for (int i = 0; i < 10; i++)
        {
            if (worker.CancellationPending)
            {
                args.Cancel = true;
                return;
            }
    
            Thread.Sleep(1000);
            worker.ReportProgress(i + 1);
        }
    };
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Oren Trutner    16 年前
    _worker.DoWork += (s, args) => {
        ....
    };
    

    或者,如果编译器无法确定s和arg的确切类型:

    _worker.DoWork += (object s, DoWorkEventArgs args) => {
        ....
    };
    
        2
  •  1
  •   Steve Gilham    16 年前

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

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