3

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.

为什么会这样?

4

2 回答 2

7

发生这种情况是因为string.Format您使用的重载需要object[]。Astring是引用类型,因此string[]可以隐式转换为object[],但int它是值类型,并且在放入对象数组之前必须装箱。因此,当您使用int它时,会选择另一个只接受一个参数的重载,然后将整个int[]作为单个对象传递,而不是单独传递每个 int。

于 2013-10-10T16:39:27.297 回答
4

因为对整数数组调用 ToString() 方法。它变成了 1 个对象。这段代码:

var nums = new int[] { 1, 2, 3 };
result = String.Format("Count {0}", nums);

结果:Count System.Int32[]

于 2013-10-10T16:40:22.447 回答