C# aggiornamento entity

in C#, Informatica, Programmazione

Novità in C# 7.1

A distanza di qualche mese dalla pubblicazione analizziamo alcune delle novità in C# 7.1.

C# 7.1 è stato pubblicato con l’upgrade 15.3 di Visual Studio 2017 (Agosto 2017). A differenza di altri rilasci, non tutte le novità sono disponibili automaticamente dopo l’aggiornamento, ma è necessario modificare manualmente la configurazione di Visual Studio. E’ possibile abilitare le nuove features del linguaggio dalla scheda Avanzate presente nelle proprietà di Compilazione del progetto.Visual Studio Impostazione per C#Per impostazione predefinita Visual studio utilizza l’ultima major version: per poter abilitare le novità degli ultimi rilasci è necessario impostare latest minor version.

Nel seguito di questo articolo vedremo alcune delle novità di C# 7.1.

Async Main

La prima novità riguarda la possibilità di utilizzare codice sincrono all’interno di applicazioni Console. Il metodo main ha subito una sostanziale modifica, prima le sue firme erano:

public static void Main();
public static int Main();
public static void Main(string[] args);
public static int Main(string[] args);

Con l’aggiornamento sono state introdotte anche le seguenti firme:

public static Task Main();
public static Task<int> Main();
public static Task Main(string[] args);
public static Task<int> Main(string[] args);

Non è più necessario richiamare un metodo asincrono dal metodo main, ma è possibile utilizzare direttamente async ed await all’interno del metodo Main.

Default Literal Expressions

Utilizzando la keyword default è possibile assegnare ad una variabile il valore di default del suo tipo.

int numeric = default(int); 
Object reference = default(Object); 
DateTime value = default(DateTime);

In C# 7.1, quando è possibile determinare il tipo di variabile (ad esempio quando stiamo utilizzando una variabile con var), è possibile semplificare la sintassi nel seguente modo:

int numeric = default;
Object reference = default;
DateTime value = default;
T defaultValue = default;

Il valore di default di un tipo può essere utilizzato come valore di ritorno da una funzione, come valore di default per un parametro opzionale e come valore per i parametri di un metodo.

Inferred Tuple Element Names

Il concetto di Tupla è stato introdotto in C# a partire dalla versione 7.0. Nella defizione di una tupla l’accesso ai suoi elementi può avvenire utilizzando Item1, Item2, ecc…

var coords2 = (x, y);
var x2 = coords2.Item1;

L’alternativa può essere quella di specificare il nome in fase di defizione della tupla:

var coords1 = (x: x, y: y);
var x1 = coords1.x;

In C# 7.1 è stata introdotta la possibilità di recuperare il valore dell’oggetto direttamente dal suo nome:

var coords2 = (x, y);
var x2 = coords2.x;

Generic Pattern Matching

Dalla versione 7.0 è possibile utilizzare la keyword is per confrontare i tipi. Non era però possibile effettuare confronti in presenza di metodi generici. Ora è possibile scrivere codice del tipo:

static string Print<T>(T input)
{
    switch(input)
    {
        case int i: 
          return "int";
        case string s: 
          return "string";
        default: 
          return "unknown";
    }
}