我正在编写一个方法并试图理解我对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));
答案 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表达式的方法相同。