String.Format很乐意使用字符串数组,但在处理异常数组时会失败:
索引(从零开始)必须大于或等于零且小于 参数列表的大小。
string result = null;
var words = new string[] { "1", "2", "3" };
result = String.Format("Count {0}{1}{2}", words); //This works.
var nums = new int[] { 1, 2, 3 };
result = String.Format("Count {0}{1}{2}", nums); //This throws an exception.
为什么会这样?
答案 0 :(得分:7)
这是因为您使用的string.Format
重载需要object[]
。 string
是引用类型,因此string[]
可以隐式转换为object[]
,但int
是值类型,在放入之前必须装箱对象数组。因此,当您使用int
时,它会选择另一个只接受一个参数的重载,然后将整个int[]
作为单个对象传递,而不是单独传递每个int。
答案 1 :(得分:4)
因为为int数组调用了ToString()方法。它变成了一个对象。 这段代码:
var nums = new int[] { 1, 2, 3 };
result = String.Format("Count {0}", nums);
会导致: 计数System.Int32 []