4
    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 个参数调用方法的第二次重载:消息、可变数量的对象参数。

有没有办法强制它调用第一个重载而不是第二个?

4

3 回答 3

4
Console.WriteLine(GetErrorMessage(new object[] { "Ticket Count", 5 }));
于 2016-07-05T12:43:10.493 回答
4

您看到的问题是因为您的方法调用中的第一项是 a string,因此将始终匹配第二个方法调用。您可以执行以下操作之一来解决此问题:

如果 args 的顺序不重要,您可以简单地确保第一项不是 a string

this.GetErrorMessage(5, "Ticket Count");

或者您可以将其string转换为object

this.GetErrorMessage((object)"Ticket Count", 5);

您总是可以进行此调用,但是它确实破坏了使用的全部目的params

this.GetErrorMessage(new object[] {"Ticket Count", 5 });
于 2016-07-05T12:45:55.327 回答
2

不,对于您所描述的情况,没有办法充分利用params关键字。由于提供了字符串参数,编译器会在重载解析期间看到更具体、更好的拟合。因此,将其强制转换为第一种形式的唯一方法是显式地将字符串强制转换为object []. 像这样的东西:

Console.WriteLine(GetErrorMessage(new object[] { "Ticket Count", 5 }));
于 2016-07-05T12:46:36.997 回答