gpt4 book ai didi

c# - 如何通过将 Func 和 Action 作为参数的函数的两个重载来简化代码?

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:59 24 4
gpt4 key购买 nike

  1. 是否可以简化此类代码?是的,我知道注释中的代码可以提取为一个方法,但是每次都写这么两个重载有点困惑。请注意,在类似 DoSomething 的函数中,可以有除 functor 之外的其他参数。

    Result DoSomething<Result>(Func<Parameter, Result> functor)
    {
    // do something to construct argument
    return functor(argument);
    }

    void DoSomething(Action<Parameter> functor)
    {
    // do something to construct argument
    functor(argument);
    }
  2. 更复杂的变体。如果 functor 调用在 using block 内,如何在不重复代码的情况下获得相同的结果?

事实上,我想找到 C# 替代 C++14 代码,例如

template <class Functor>
auto DoSomething(Functor functor)
{
// do something...
return functor(argument);
}

最佳答案

好吧,你可以创建一个 FuncWrapper<Parameter, Result>具有来自 Func<Parameter, Result> 的隐式转换的泛型类和 Action<Parameter>和一个 Call(Parameter)执行实际调用的函数。

FuncWrapper 可以有两个成员(Func<...> 和 Action<...>)并通过非空成员调用,或者您可以使用 lambda 包装 Action<...>本质上将其转换为 Func<...> 的表达式(调用操作,返回 default(Result))

然后在类中只定义一个函数:

Result DoSomething(FuncWrapper<Parameter, Result> wrapper)
{
// Find argument
return wrapper.Call(argument);
}

你的 FuncWrapper类应该返回 default(Result) Action<Parameter> 情况下的值(value).

关于c# - 如何通过将 Func 和 Action 作为参数的函数的两个重载来简化代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898685/

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