Le novità di C# 7 disponibili con Visual Studio 2017

di Cristian Civera, in C#,

Le novità di C# 7 disponibili con Visual Studio 2017

Con il recente rilascio di Visual Studio 2017 possiamo finalmente sfruttare anche le nuove caratteristiche di C#, ormai giunto alla versione 7. Come ormai avviene da molti anni, le novità non sono rivoluzionarie, ma cercano piuttosto di tenere il linguaggio al passo con i tempi e di colmare quelle mancanze che vengono a crearsi anche in seguito all'evoluzione dei framework e le necessità della programmazione odierna.

Sebbene il progetto sia open source e le proposte davvero tante, il linguaggio vuole mantenere una certa stabilità ed evitare di inserire nuove keyword o sintassi che non introdurrebbero reali vantaggi. La bontà dell'IL e del runtime di .NET fanno sì, inoltre, che tutte le novità introdotte, anche in questa nuova versione, non necessitino di modifiche al motore, poiché possibili semplicemente intervenendo sul compilatore. Le novità che vedremo in questo articolo, quindi, producono assembly .NET perfettamente compatibili anche con applicativi e librerie di altre versioni del framework. C# 7 può di conseguenza essere usato anche per sviluppare progetti dal .NET Framework 2.0 in poi, ovviamente includendo anche il nuovo .NET Core, in tutte le sue versioni.

Possiamo fin da subito utilizzare ciò che vedremo nell'articolo, sia per nuovi progetti, ma anche per il proseguo di quelli esistenti. L'unico requisito è quello di dover utilizzare Visual Studio 2017 o msbuild 2017, già disponibile se sfruttiamo Visual Studio Team Services per le nostre build automatizzate.

Partiamo da una semplice novità, ma che ci renderà più veloce la scrittura del nostro codice, le out variable.

Le out variable

Ci sono molteplici funzioni in .NET che implementano il pattern try, cioè restituiscono un booleano e forniscono il valore che vogliamo ottenere attraverso un parametro di out. Pensiamo al TryGetValue di un Dictionary<,> o al TryParse di un tipo primitivo. In questi casi dobbiamo dichiarare prima la variabile che conterrà il valore di ritorno e poi invocare la funzione. In C# 7 possiamo fare tutto questo direttamente sul parametro della funzione, come mostrato nello snippet seguente.

var dic = new Dictionary<int, string>
{
    {1, "uno" },
    {2, "due" }
};
 
if (dic.TryGetValue(1, out string value))
{
    Console.WriteLine(value);
}

Come possiamo vedere, dopo la keyword out possiamo specificare il tipo, dichiarando la variabile direttamente sul parametro. Oltre al tipo specifico possiamo anche usare la keyword var, lasciando inferire il tipo al compilatore.

Dobbiamo prestare attenzione al fatto che lo scope della variable value, usata nell'esempio, è identico al passato, cioè visibile anche fuori dalla condizione, ma non prima. Nell'esempio seguente possiamo infatti vedere che sebbene la compilazione avvenga con successo, l'utilizzo della variabile non valorizzata potrebbe dare un errore a runtime.

// Non presente nel dizionario
if (dic.TryGetValue(3, out string value2))
{
    Console.WriteLine(value);
}
 
// Va in errore: null reference
int length = value2.Length;

Questa nuova caratteristica può essere usata anche per funzioni con più parametri di out, anche se stilisticamente non in linea con le linee guida.

5 pagine in totale: 1 2 3 4 5
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc