Ответ 1
Разница в том, что первая часть кода вызывает string.Format(string, object[])
... тогда как вторая часть кода вызывает string.Format(string, object)
.
null
является допустимым аргументом для второго метода (он должен был считаться значением для первого заполнителя), но не первым (где null
обычно представляет собой массив заполнителей). В частности, сравните документацию, когда вызывается NullArgumentException
:
string.Format(string, object)
:
форматnull
Но:
string.Format(string, object[])
:
формат или argsnull
Подумайте о string.Format(string, object)
как о реализации чего-то вроде:
public static string Format(string format, Object arg0)
{
return string.Format(format, new object[] { arg0 } );
}
Итак, после немного замены ваш код ближе к:
// Broken code
object[] args = null; // No array at all
var test = string.Format("{0}", args);
// Working code
object[] args = new object[] { null }; // Array with 1 value
var test = string.Format("{0}", args);