当多个重载可用时,带有可变参数数量的c#函数会导致混乱

本文关键字:函数 数数 混乱 重载 变参 | 更新日期: 2023-09-27 17:54:47

    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

这意味着,它调用方法的第二次重载,带有两个参数:message,可变数量的对象参数。

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

当多个重载可用时,带有可变参数数量的c#函数会导致混乱

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

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

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

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

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

你总是可以调用这个,但是它违背了使用params:

的全部目的。
this.GetErrorMessage(new object[] {"Ticket Count", 5 });
Console.WriteLine(GetErrorMessage(new object[] { "Ticket Count", 5 }));

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

Console.WriteLine(GetErrorMessage(new object[] { "Ticket Count", 5 }));