【发布时间】:2014-02-24 10:20:37
【问题描述】:
最近,我创建了一个新类,假设包装了我想使用的每个方法,如果失败则重试。
为了使这个功能可用于从一个参数到五个甚至更多参数的各种方法,我创建了一些方法重载。
在某些情况下尝试使用此方法给了我编译错误: “无法解决方法 - 候选人是” 我想得到一些关于如何处理它的建议。
所以,这里是两种方法的示例:
public static TResult Do<T, TResult>(Func<T, TResult> action, T param,
RetryIntervals retryInterval, int retryIntervalMultiplier = 0, int retryCount = 3)
public static TResult Do<T, T2, TResult>(Func<T, T2, TResult> action, T param, T2 param2,
RetryIntervals retryInterval , int retryIntervalMultiplier = 0, int retryCount = 3)
如果我这样使用这个新功能:
RetryProcess.Do(CacheManager.ExecuteSet, key, value,RetryProcess.RetryIntervals.TenMilliSeconds);
我收到上面提到的错误。
到目前为止,我想到的唯一解决方案是:
- 在每次调用中使用所有参数而不使用默认参数(不喜欢它,因为我需要默认参数来使代码更干净)。
- 每个“Do”方法都会有不同的名称,具体取决于它有多少参数(也觉得这不是一个好的解决方案,错过了重载的想法)。
你对我有什么其他想法吗?
【问题讨论】:
-
一般情况下,最好不要将重载方法与默认参数混合使用。相反,如果您正在重载,请添加更多不带参数的重载,然后让它们使用该默认值调用相关方法。我不知道这是否是你的问题,只是我发现的东西
-
CacheManager.ExecuteSet是如何定义的? -
public static bool ExecuteSet(string key, object value, ExpirationTimeEnum expirationTime = ExpirationTimeEnum.Never)