Se vi capitasse di voler utilizzare nei vostri giochi XNA alcune delle novità introdotte dall’ultima versione di C#, potreste inbattervi in alcune difficoltà inaspettate.
Ecco cosa succede, ad esempio, se in un progetto creato per Windows Phone 7 provate a implementare i c.d. “optional parameters” del tipo:
public void ExampleMethod(int required, string optionalstr = "default string", int optionalint = 10);
Nota: Per chi ancora non avesse avuto l’occasione di familiarizzare con le nuove features di C# 4.0, è ora possibile definire un metodo (o un costruttore, un indexer o un delegate) specificando quali parametri sono richiesti e quali invece sono opzionali. Ogni chiamata a questo metodo deve necessariamente fornire gli argomenti richiesti, ma può omettere quelli opzionali. Ciascuno dei parametri opzionali ha un “valore” di default che ne costituisce parte integrante della sua definizione. Questo significa che, se nessun argomento è fornito per I parametri opzionali, questi assumeranno il valore di default.
Se provate a implementare un metodo siffatto, otterrete il seguente errore:

Questo accade perché, di default, il framework XNA utilizza versioni differenti di C# a seconda della piattaforma per la quale l’applicazione è sviluppata. In particolare, mentre I giochi per Windows supportano tutte le feature dell’ultima release di C#, i progetti per Windows Phone e XBox 360 sono ancora legati alla versione precedente.
Se lo desiderate, potete modificare queste associazioni nella finestra “Advanced Build Settings“ raggiungibile dalle proprietà del progetto (click destro sul progetto –> “Properties”, quindi click sul tab “Build” –> “Advanced…”):

In “Language Version” potete infine scegliere la versione che del linguaggio che più preferite ma ATTENZIONE!! Non tutte le funzionalità di C# 4.0 sono effettivamente supportate dal framework (almeno per il momento)!
In linea generale, si può dire che XNA supporti solamente quelle “funzionalità” che, rispetto alle specifiche delle versioni precedenti, rappresentano solo un pò di syntactic sugar, vale a dire espressioni che permettono di fare qualcosa che era già possibile prima, semplicemente risparmiando righe di codice), come appunto gli optional parameter. Sono invece escluse quelle funzionalità che si traducono, ad esempio, in qualcosa di completamente nuovo, come I tipi dynamic.
Per ulteriori approfondimenti, si veda questa utile discussione sul forum MSDN