这可能会最容易解释一个例子。如何从非泛型函数返回泛型函数?
那么,让我们从以下TryNTimes
函数开始。
而且使用它像
MyType x = TryNTimes(DoSomething, 3);
MyOtherType y = TryNTimes(DoSomethingElse, 3);
但我使用这个在很多情况下具有相同N
,所以我想可以很容易地创建注入的n
值的函数进入这里。所以使用将
var tryThreeTimes = CreateRetryWrapper(3);
MyType x = tryThreeTimes(DoSomething);
MyOtherType y = tryThreeTimes(DoSomethingElse);
我能想出是
public static Func<Func<T>, T> CreateRetryWrapper<T>(int n)
{
return f => TryNTimes(f, n);
}
最近但那不是我真正想要的东西,因为它迫使我指定T
先验,所以它不是真的以我想要的方式重复使用。我希望能够延迟T
,将泛型函数作为值返回。像
public static Func<Func<_>, _> CreateRetryWrapper(int n)
{
return f => TryNTimes(f, n);
}
事情是这样的东西在C#中的可能吗?
为什么不是一类'RetryWrapper',在至极的'TryNTimes'功能是成员,而n是财产?这可能是对这个问题的回避,但这就是我认为OOP/ – dovid
@ lomed的正确方法。好的解决方法。我认为答案是否定的,C#不允许通用值或其他东西。所以这将是一个很好的选择。 –