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 reason why is because once you introduce the `+` then the C# operator binding rules come into play. It will consider the set of `+` operators available and select the best overload. One of those operators is the following 

```
string operator +(string x, object y)

```

This overload is compatible with the argument types in the expression `null + true`. Hence it is selected as the operator and is evaluated as essentially `((string)null) + true` which evaluates to the value `"True"`. 

Section 7.7.4 of the C# language spec contains the details around this resolution .
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.