Alex Rivera | Logout

ToString on null string

Asked 2011-01-25T12:39:22.477
40

Why does the second one of these produce an exception while the first one doesn't?

string s = null;
MessageBox.Show(s);
MessageBox.Show(s.ToString());

Updated - the exception I can understand, the puzzling bit (to me) is why the first part doesn't show an exception. This isn't anything to do with the Messagebox, as illustrated below.

Eg :

string s = null, msg;
msg = "Message is " + s; //no error
msg = "Message is " + s.ToString(); //error

The first part appears to be implicitly converting a null to a blank string.

Edit
Report

3 Answers

31

because you cannot call instance method ToString() on a null reference.

And MessageBox.Show() is probably implemented to ignore null and print out empty message box.

answered 2011-01-25T12:42:18.043
14

It is because MessageBox.Show() is implemented with pinvoke, it calls the native Windows MessageBox() function. Which doesn't mind getting a NULL for the lpText argument. The C# language has much stricter rules for pure .NET instance methods (like ToString), it always emits code to verify that the object isn't null. There's some background info on that in this blog post.

answered 2011-01-25T12:52:24.430
7

Behind the scenes concat is being called in your follow up question / update E.g

string snull = null;

string msg = "hello" + snull;

// is equivalent to the line below and concat handles the null string for you.
string msg = String.Concat("hello", snull);

// second example fails because of the toString on the null object
string msg = String.Concat("hello", snull.ToString());

//String.Format, String.Convert, String.Concat all handle null objects nicely.
answered 2012-04-18T10:37:38.240

Your Answer