Вопрос

Кто -нибудь может объяснить, почему происходит следующее:

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 в качестве форматирующей строки, которая бросает исключение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top