在lambda表达式中传递Action参数的参数

时间:2017-07-11 12:35:23

标签: c# lambda

我正在编写一个方法并试图理解我对C#lambda表达式的理解。 Bellow是对我的后台更新方法的调用。它运行任务下载每个文件并以lambda表达式形式调用提供的Action,如下所示。

 await BackgroundDownload((ParamOne, ParamTwo) => {
     // Update file downloaded count
     // Update file progress bar                   
 });

我解决这个问题的方法是如何在lambda表达式中为我的Action提供参数,如上所示,以便我可以在我的代码中引用它们?

编辑:

我声明的方法:

public static async Task BackgroundDownload(Action<int, int> progressUpdate)

然后这个方法调用:

progressUpdate(itemsToDownload.Count, (int)(current * 100 / response.ContentLength));

2 个答案:

答案 0 :(得分:1)

只需在lambda表达式中使用变量。

await BackgroundDownload((ParamOne, ParamTwo) => {
 Console.WriteLine("File downloaded:" + ParamOne);
 Console.WriteLine("File progress:" + ParamTwo); 

});

或创建方法

public static void UpdateResult(int filesCount, int fileProgress)
{
  //Update Progress
}

并使用它代替lambda

await BackgroundDownload(UpdateResult);

答案 1 :(得分:0)

只需将它们命名为正常。

如果方法定义为:

public void executeAction(Action<int, int> action) { }

您可以使用以下命名参数创建lambda操作:

int c;
executeAction((int a, int b) => { c = a + b; });

或者在你的情况下,它会像

await BackgroundDownload((int count, int progress) => {
    // Update file downloaded count
    this.FileCount = count;
    // Update file progress bar                   
    this.Progress = progress;
});

使用lamba表达式,您的范围与调用lambda表达式的方法相同。