【问题标题】:Debugging a System.FormatException调试 System.FormatException
【发布时间】:2013-11-20 09:23:35
【问题描述】:

“索引(从零开始)必须大于或等于零且小于参数列表的大小。”
(“Der Index, basierend auf 0 (null), muss größer als oder gleich Null sein, und kleiner als die Größe der Argumentenliste。”)

执行该行时:

search.Filter = string.Format(filter,filterparams);

其中,在运行时,filter 包含 "(sAMAccountName={0})(sAMAccountName={1})"filterparams 是具有两个成员字符串“Testuser”和“Vertrieb”的 StringList。

试图告诉我的错误信息到底是什么?

【问题讨论】:

  • 使用search.Filter = string.Format(filter,filterparams.ToArray());,或search.Filter = string.Format(filter,filterparams[0], filterparams[1]);
  • 谢谢,那行得通。第二个仅限于两个参数 - 但在生产中我的可能会变成两位数。

标签: c# debugging exception runtime-error


【解决方案1】:

错误表明格式字符串中的标记比参数列表中的多。 String.Format 的第二个参数是一个对象数组(来自 MSDN):

public static string Format(
    string format,
    params object[] args
)

StringList 不会隐式转换为对象数组,因此 String.Format 将 StringList 解释为一个参数 - 因此会出现错误。

【讨论】:

  • 进一步扩展:过滤器数组的每一项都必须直接提供给格式化函数。只需调用 filterparams.ToArray()
  • @Christian Sauer:感谢您提供更多信息。
猜你喜欢
  • 2015-02-21
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多