Соответствующая перегрузка Format
:
public static string Format(string format, params Object[] args)
Это означает, что вы можете назвать его так:
Format("...",new object[]{...})//Each array element is used
Или с объектами непосредственно в качестве параметров:
Format("...",object1, object2,...)//the objects are used
В отличие от того, что я первоначально думал, string[]
действительно входит в первый вариант этого кода.Это связано с ковариацией массива в C # /. Net , который позволяет неявно преобразовывать string[]
в object[]
.
string.Format("{0} {1}",new string[]{"A","B"})
отпечатков A B
.
С другой стороны, если вы попробуете подобный код с int[]
, он не будет работать:
string.Format("{0} {1}",new int[]{1,2})
Будет сгенерировано исключение, потому что оно входит во второй вариант, и, следовательно, только в один параметртипа int[]
виден string.Format
.Это различие заключается в том, что ковариация массива работает только для массивов с элементами, которые имеют тип reference , например string
, а не тип value , например int
.Это означает, что int[]
не может быть неявно преобразовано в object[]
.
Так что проблема с вашим исходным кодом, вероятно, заключается просто в том, что вы использовали индекс {8}
, который находится вне диапазона.