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();