【发布时间】:2016-07-05 12:34:34
【问题描述】:
public string GetErrorMessage(params object[] args)
{
return GetErrorMessage("{0} must be less than {1}", args);
}
public string GetErrorMessage(string message, params object[] args)
{
return String.Format(message, args);
}
电话来了
Console.WriteLine(GetErrorMessage("Ticket Count", 5));
输出
Ticket Count
这意味着,它使用 2 个参数调用方法的第二次重载:消息、可变数量的对象参数。
有没有办法强制它调用第一个重载而不是第二个?
【问题讨论】:
-
没有。第二个重载是更好的匹配,也是首选,因为它避免了创建参数数组的开销。除非您想要在可能的情况下调用第二个,否则为什么要同时提供这两个?
-
这个有默认的错误信息,方便消费者使用。我无法摆脱任何东西,因为两者都是要被调用的。
-
好吧,您显示的错误消息只有两个占位符,那么为什么不将便利声明更改为只接受两个参数呢?如果你愿意,可以让他们输入
object,或者使用通用方法。 -
对于其他特定的验证,参数的数量可能会达到 3 以进行名称、最小值和最大值的范围验证。当我们想说必须输入任何这些属性时,数字可能会超出的组验证。而且,这只是代码的提取简化版本,因此您可能无法看到复杂性。
标签: c# overloading params-keyword