Why is the result of adding two null strings not null?

c#, null, string

Solution

From MSDN:

In string concatenation operations, the C# compiler treats a null string the same as an empty string,

Even though `xyz` is null, calling the += operator (which is converted to a call to the + operator (*)) on it does not throw a `NullReferenceException` because it's a static method. In pseudo code:

xyz = String.+(null, null);

The implementation will then interpret this as if it was

xyz = String.+("", "");

(*) Section §7.17.2 of the C# specification:

An operation of the form x op= y is processed by applying binary operator overload resolution (§7.3.4) as if the operation was written x op y.

Problem

I was fiddling around in C# when I came across this weird behavior in .Net programming. I have written this code: ``` static void Main(string[] args) { string xyz = null; xyz += xyz; TestNullFunc(xyz); Console.WriteLine(xyz); Console.Read(); } static void TestNullFunc(string abc) { if (abc == null) { Console.WriteLine("meow THERE ! "); } else { Console.WriteLine("No Meow "); } } ``` I got the output as `No meow`, which means the string is not `null`. How is this possible? Why does adding two `null` strings, result in a non-`null` string? On debugging when I check the value of `xyz` after adding it to itself, its value is `""` (no characters).

Original source

Related problems