为什么String.Format歧视?

Bre*_*ias 3 .net c#

String.Format很乐意使用一个字符串数组,但在处理带有异常的int数组时会失败:

索引(从零开始)必须大于或等于零且小于参数列表的大小.

        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.
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Chr*_*ris 7

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