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 .
`null` will be cast to null string, and there is implicit converter from bool to string so the `true` will be cast to string and then, `+` operator will be applied: it's like: string str = "" + true.ToString();

if you check it with Ildasm:

`string str = null + true;`

it's as bellow:

```
.locals init ([0] string str)
  IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  box        [mscorlib]System.Boolean
  IL_0007:  call       string [mscorlib]System.String::Concat(object)
  IL_000c:  stloc.0

```