gpt4 book ai didi

c# - 如何避免重复接受 Func 作为参数的方法的多个覆盖

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

我想要一个“通用的”——也就是说,如果可能的话,一个具有单一签名的方法——而不是下面复制/粘贴代码。

我的目标是用 Spy Double 来“包装”来自第三方 DLL 的方法。

    int spy(Func<int> method)
{
methodCalls.Add(method.Method.Name);

return method.Invoke();
}

int spy(Func<string, int> method, string arg)
{
methodCalls.Add(method.Method.Name);

return method.Invoke(arg);
}

private int spy(Func<int, int> method, int arg)
{
methodCalls.Add(method.Method.Name);

return method.Invoke(arg);
}

您看到了问题:我有几乎相同的方法 block ...有没有办法避免这种情况并仍然完成所需的行为?

最佳答案

好吧,您可以从使它们通用化开始:

public TResult Spy<TResult>(Func<TResult> method)
{
methodCalls.Add(method.Method.Name);
return method();
}

public TResult Spy<TArg, TResult>(Func<TArg, TResult> method, TArg arg)
{
methodCalls.Add(method.Method.Name);
return method(arg);
}

public TResult Spy<TArg1, TArg2, TResult>
(Func<TArg1, TArg2, TResult> method, TArg1 arg1, TArg2 arg2)
{
methodCalls.Add(method.Method.Name);
return method(arg1, arg2);
}

...

这至少意味着您只需要与要处理的最大参数数量一样多的重载。在不失去编译时类型安全性的情况下,您将无法轻易地做得比这更好。

关于c# - 如何避免重复接受 Func<T, int> 作为参数的方法的多个覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512270/

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