Строка.Формат Аргумента Значение Null Исключение


приведенный ниже код будет выдавать аргумент Null Exception

var test = string.Format("{0}", null); 

однако, это вернет пустую строку

string something  = null; 
var test = string.Format("{0}", something); 

просто любопытно узнать, почему второй кусок кода не бросает исключение. Это ошибка ?

3 60
c#

3 ответа:

разница в том, что первый кусок кода зовет string.Format(string, object[])... в то время как второй кусок кода вызывает string.Format(string, object).

null является допустимым аргументом для второго метода (это просто ожидаемое значение для первого заполнителя), но не первый (где null обычно массив заполнителей). В частности, сравните документацию для when NullArgumentException бросается:

string.Format(string, object):

второй фрагмент кода вызывает следующие перегрузки:

Format(String, Object)

здесь значение может быть null, согласно документации.

первый фрагмент кода использует следующие перегрузки:

Format(String, Object[])  
на второе значение не может быть null, согласно документации.

незначительный момент, не упомянутый существующими ответами, и почти делает вопрос спорным:

полное сообщение для ArgumentNullException - Это:

значение не может быть null.
Имя параметра: параметр args

также часть проблемы здесь null - это любой тип. Явное приведение его к string или object (или используйте C# default() функция) позволит избежать этой проблемы.