为什么String.Format歧视?

时间:2013-10-10 16:32:01

标签: c# .net

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.

为什么会这样?

2 个答案:

答案 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 []