C# StringFormat期间出现异常:索引(基于零)必须大于或等于零且小于参数列表的大小

C# StringFormat期间出现异常:索引(基于零)必须大于或等于零且小于参数列表的大小,c#,string.format,C#,String.format,我在网站上看到了一些这样的例子,但都有错误,因为占位符被命名错误,或者在参数和占位符的数量上存在差异,我的日志如下所示 Logger.InfoFormat("Successfully connected to outgoing queue for platform {0}. QueueManagerName = {1}, HostName = {2}, ChannelName = {3}, QueueName = {4}", Platform.ID, Platform.MqGatewayPara

我在网站上看到了一些这样的例子,但都有错误,因为占位符被命名错误,或者在参数和占位符的数量上存在差异,我的日志如下所示

Logger.InfoFormat("Successfully connected to outgoing queue for platform {0}. QueueManagerName = {1}, HostName = {2}, ChannelName = {3}, QueueName = {4}", Platform.ID, Platform.MqGatewayParams.QueueManagerName, Platform.MqGatewayParams.HostName, Platform.MqGatewayParams.ChannelName, Platform.MqGatewayParams.OutgoingQueueName);
InfoFormat方法:

public void InfoFormat(string className, string methodName, string format, object arg0, object arg1, object arg2)
    {
        _log4NetLogger.InfoFormat(GetMessageString(className, methodName, format), arg0, arg1, arg2);
    }
在内部,它称为gemessagesting

private string GetMessageString(string className, string methodName, object message)
    {
        return string.Format("[{0}::{1}] {2}", className ?? string.Empty, methodName ?? " ", message ?? " ");
    }

有人能告诉我我做错了什么吗?

InfoFormat
方法中:

这只是将3个格式参数传递给
\u log4NetLogger.InfoFormat
,但格式字符串有5个

对于可变长度参数列表,您需要使用
params
,如下所示:

void FormatString(string format, params object[] args) {
  String.Format(format, args)
}
(为较短的参数列表提供重载有一个小的好处,例如使用
String.Format
本身,因为不需要分配数组;但这是一个小的优化,除非这些函数被大量使用。)


附:示例调用方似乎正在传递一个格式字符串作为
InfoFormat
的第一个参数,但其实现似乎期望参数查找该字符串。

您得到了什么错误?我给出的主题是“StringFormat期间的异常:索引(零基)”必须大于或等于零且小于参数列表的大小“您确定这是
InfoFormat
方法的签名吗?因为如果这是真的,你在调用它的时候完全搞乱了参数。@Ivan Stoev非常感谢,伙计,我完全不明白你的一句话让我今天遇到了这个问题:),是的,我只是搞乱了参数
void FormatString(string format, params object[] args) {
  String.Format(format, args)
}