Se tu definisci una costante di tipo char
 

private const char chACapo = (char)13;
 
e la usi in un MessageBox in 
questo modo
 
MessageBox.Show( e.ErrCode + chACapo + e.ErrMessage, 
"Info")


 
se e.ErrCode è un numero, allora il compilatore somma il suo valore con quello di chACapo (che vale 13) prima di fare il cast a String e concatenarlo con e.ErrMessage (che è string) invece di concatenare tutto come stringa.

La cosa ha una sua logica, anche se contorta: il compilatore valuta i primi 2 operandi e decide che si tratta di un'addizione anzichè di un concatenamento di stringhe... peccato che il tutto sia argomento di una chiamata a funzione che vuole una stringa --> baco.
 
Se invece tu scrivi
 

MessageBox.Show(String.Concat(e.ErrCode, chACapo, e.ErrMessage), "Info")


 
tutto funziona come dovrebbe.
 

Il tutto con Visual Studio 2008 e Framework 3.5 SP1

Simpatico, vero?