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?