Question: Since `true` is not a string type, how is `null + true` a string ?

```
string s = true;  //Cannot implicitly convert type 'bool' to 'string'   
bool b = null + true; //Cannot implicitly convert type 'string' to 'bool'

```

What is the reason behind this?

Answer: 
The compiler goes out hunting for an operator+() that can take a null argument first. None of the standard value types qualify, null is not a valid value for them. The one and only match is System.String.operator+(), there's no ambiguity.

The 2nd argument of that operator is also a string. That goes kapooey, cannot implicitly convert bool to string.
Interestingly, using Reflector to inspect what is generated, the following code:

```
string b = null + true;
Console.WriteLine(b);

```

is transformed into this by the compiler:

```
Console.WriteLine(true);

```

The reasoning behind this "optimization" is a bit weird I must say, and does not rhyme with the operator selection I would expect. 

Also, the following code:

```
var b = null + true; 
var sb = new StringBuilder(b);

```

is transformed into

```
string b = true; 
StringBuilder sb = new StringBuilder(b);

```

where `string b = true;` is actually not accepted by the compiler.