如何用 func 委托替换 Action 委托,将值返回给函数
Posted
技术标签:
【中文标题】如何用 func 委托替换 Action 委托,将值返回给函数【英文标题】:How to replace Action delegate with a func delegate return a value to function 【发布时间】:2020-01-27 18:17:01 【问题描述】:我有一个名为 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 委托将 i 值返回给 Completeddownload 函数,方法是什么
Loading loading=new Loading();
loading.LoadProcedure(100,display.CompletedDownLoad);
还帮助我主要如何指定它。
【问题讨论】:
您能否请edit 澄清为什么不能使用Func<…>
?
如何在上面的上下文中使用它先生你可以指定它
【参考方案1】:
在您的示例中,您似乎不需要对响应执行任何操作。因此,您无需尝试从 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;
无需将inAction
更改为Func<>
,因为您目前没有在inAction 中进行任何计算。
【讨论】:
先生,对于同一个例子,我怎样才能用 func 委托替换动作委托 @Rock 您当前的示例不支持 Func 用例,但我添加了一个附加示例来返回触发回调的值。以上是关于如何用 func 委托替换 Action 委托,将值返回给函数的主要内容,如果未能解决你的问题,请参考以下文章