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 .
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.