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?