如何用 func delegate return a value to function 替换 Action delegate

How to replace Action delegate with a func delegate return a value to function

我有一个名为 CompleteDownload 的函数,它接受 int 参数,我想在这个函数中打印百分比

public void CompletedDownload(int percentage)
{    
    Console.WriteLine(mID+":"+percentage+"% Loading is Completed");
 }

我有一个功能:

public void LoadProcedure(int n,Action<int> inAction)
    {   
      // LoadingDisplay loadingDisplay=new LoadingDisplay(n);
        for(int i=0;i<=n;i++)
        {
            if(i==n/4)
            {   

                inAction(i);


            }
        }
     }

我想 return 我使用 func delegate 将值设置为 Completeddownload Function 方法是什么

Loading loading=new Loading();
loading.LoadProcedure(100,display.CompletedDownLoad);

并帮助我主要说明如何指定它。

在您的示例中,您似乎不需要对响应执行任何操作。因此,您无需尝试 return 来自 CompletedDownload 方法的值,您可以处理您的操作并在满足条件时简单地中断循环。

public void LoadProcedure(int n, Action<int> inAction)
{
    // LoadingDisplay loadingDisplay=new LoadingDisplay(n);
    for (int i = 0; i <= n; i++)
    {
        if (i == n / 4)
        {
            inAction(i);
            break;
        }
    }
}

这将 运行 您的操作,退出循环,并 return 到调用方法。

如果您绝对需要 return 触发操作的输入变量,只需将 LoadProcedure 的 return 类型从 void 更改为 int 并 return结果。

var result = loading.LoadProcedure(100,display.CompletedDownLoad);

public int LoadProcedure(int n, Action<int> inAction)
{
    // LoadingDisplay loadingDisplay=new LoadingDisplay(n);
    for (int i = 0; i <= n; i++)
    {
        if (i == n / 4)
        {
            inAction(i);
            return i;
        }
    }
}

不需要将 inAction 更改为 Func<>,因为您目前没有在 inAction 中进行任何计算。