2010-10-21 2 views
4

Может кто-нибудь объяснить, почему происходит следующее:String.Format с форматом нулевой

String.Format(null, "foo") // Returns foo 
String.Format((string)null, "foo") // Throws ArgumentNullException: 
            // Value cannot be null. 
            // Parameter name: format 

Спасибо.

ответ

10

Его вызов другой перегрузки.

string.Format(null, ""); 
//calls 
public static string Format(IFormatProvider provider, string format, params object[] args); 

MSDN Method Link описание выше.

string.Format((string)null, ""); 
//Calls (and this one throws ArgumentException) 
public static string Format(string format, object arg0); 

MSDN Method Link описание выше.

+0

И я думаю, мы должны отправить напоминание, чтобы забрать копию RedGate Reflector, так что смотреть это проще. ;) – jcolebrand

+1

Умм ... Я бы скорее взглянул на документы MSDN, чем на Dig Refor для этой информации. Или я где-то скучаю по шутке (да, часто рефлектор хорош, у всех это должно быть). – Chris

+1

Вы имеете в виду рефлектор Луца Родера? (Я до сих пор не принял распродажу) –

1

Поскольку который перегружен функция вызывается получает определяется во время компиляции на основе статического типа параметра:

String.Format(null, "foo") 

вызовов String.Format(IFormatProvider, string, params Object[]) с пустым IFormatProvider и строки форматирования «Foo», который прекрасно ,

С другой стороны,

String.Format((string)null, "foo") 

вызовы String.Format(string, object) с нулевым как строка форматирования, который генерирует исключение.

Смежные вопросы