String.format с нулевым форматом
-
10-10-2019 - |
Вопрос
Кто -нибудь может объяснить, почему происходит следующее:
String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
// Value cannot be null.
// Parameter name: format
Спасибо.
Решение
Это вызывает другую перегрузку.
string.Format(null, "");
//calls
public static string Format(IFormatProvider provider, string format, params object[] args);
Ссылка на метод MSDN описывая выше.
string.Format((string)null, "");
//Calls (and this one throws ArgumentException)
public static string Format(string format, object arg0);
Ссылка на метод MSDN описывая выше.
Другие советы
Поскольку какая перегруженная функция называется, определяется во время компиляции на основе статического типа параметра:
String.Format(null, "foo")
вызовы String.Format(IFormatProvider, string, params Object[])
с пустой iformatprovider и форматирующей строкой «foo», что вполне нормально.
С другой стороны,
String.Format((string)null, "foo")
вызовы String.Format(string, object)
с NULL в качестве форматирующей строки, которая бросает исключение.
Не связан с StackOverflow