gpt4 book ai didi

c# - 定义可以接受 Action 或 Func 委托(delegate)的方法的最佳方法

转载 作者:行者123 更新时间:2023-11-30 21:46:14 25 4
gpt4 key购买 nike

我想介绍一个可以接收 Action 的方法/函数或 Func<T> ,并根据它得到的结果,它应该返回 voidT .

现在我必须用两个几乎相同的版本来编写这个方法。

public void WrapAction(Action action) {
// do something...
action();
// do something more...
}

public T WrapFunc(Func<T> func) {
// do something...
var result = func();
// do something more...
return result;
}

是否有任何技术可以避免这种重复?

相比之下,例如在 Javascript 中我可以灵活地接受任何类型的函数(可能是 void )并返回它的结果,如果它是 void , 那么它将返回 undefined .但是在 C# 中不能写类似 Func<void> 的东西.

最佳答案

如何制作 Func<bool>通过扩展方法退出操作并减少包装器以处理 Func<T>仅。

public static class ActionExtensions
{
public static Func<bool> ToFunc(this Action action)
{
return () =>
{
action();
return true;
};
}
}

然后WrapAction可以简单地调用 WrapFunc .

public void WrapAction(Action action)
{
WrapFunc(action.ToFunc());
}

或者删除WrapAction完全使用 WrapFunc直接。

WrapFunc(action.ToFunc());    

关于c# - 定义可以接受 Action 或 Func 委托(delegate)的方法的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com