In the following code below, why do the two string.Format
calls not behave the same way? In the first one, no exception is thrown, but in the second one an Ar
I'm guessing here, but it looks to be the difference of which overloaded call you're hitting; String.Format has multiple.
In the first example, it would make sense you're hitting String.Format(string,object).
In the second example by providing null
you're most likely hitting String.Format(string,params object[]) which, per the documentation, would raise an ArgumentNullException
when:
format or args is null.
If you're running .NET4, try using named parameters:
String.Format("Another exception occured: {0}", arg0: null);
Why is it hitting the params object[]
overload? Probably because null
isn't an object, and the way params
works is that you can pass either each value as a new object in the call or pass it an array of the values. That is to say, the following are one in the same:
String.Format("Hello, {0}! Today is {1}.", "World", "Sunny");
String.Format("Hello, {0}! Today is {1}.", new Object[]{ "World", "Sunny" })
So it's translating your statement call to something along the lines of:
String format = "Another exception occured: {0}";
Object[] args = null;
String.Format(format, args); // throw new ArgumentNullException();