這可能會最容易解釋一個例子。如何從非泛型函數返回泛型函數?
那麼,讓我們從以下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#不允許通用值或其他東西。所以這將是一個很好的選擇。 –