c# - 如何用 func 委托(delegate)替换 Action 委托(delegate)将值返回给函数

标签 c# c#-4.0 delegates c#-3.0 c#-2.0

我有一个名为 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);


            }
        }
     }

我想使用 func delegate 将 i 值返回给 Completeddownload 函数,方法是什么

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

并帮助我主要了解如何指定它。

最佳答案

在您的示例中,您似乎不需要对响应执行任何操作。因此,而不是尝试从 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;
        }
    }
}

这将运行您的操作,退出循环,然后返回到调用方法。

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

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;
        }
    }
}

无需更改inActionFunc<>因为您当前没有在 inAction 中进行任何计算。

关于c# - 如何用 func 委托(delegate)替换 Action 委托(delegate)将值返回给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59936738/

相关文章:

c# - 在注册表中获取特定分支及其所有值

mysql - 如何将数据表绑定(bind)到 reportviewer 运行时

objective-c - 将数据传递给委托(delegate)

ios - 想要创建一个监听器来检测整个应用程序中的 viewWillAppear 调用

c# - 某些用户的 ASP.NET 转发器控件重叠

c# - POST 到 HTTPS 身份验证错误

asp.net-mvc - ASP.net MVC Controller - 构造函数的使用

Swift - 为什么 NSOutlineView 中的参数项总是 nil?

c# - 为什么 AutoFac 的 AsImplementedInterfaces 在另一种类型上会破坏我的解析器?

validation - IValidatableObject 通过验证,但 StringLength 无效