Introduzione

Recentemente rilasciata, la nuova versione di C# 11 è stata definita da Microsoft “la versione della community“.

In effetti, molti sono stati i contributi forniti dalla comunità: suggerimenti, approfondimenti e segnalazioni di bug fino all’implementazione di intere funzionalità. Entriamo nel vivo e vediamo le principali novità!

In questo articolo

Valori letterali stringa UTF-8

Valori letterali stringa non elaborati

Attributi generici

Conclusioni

Un libro per approfondire l’utilizzo di C# 11 con .NET 7

Valori letterali stringa UTF-8

Per impostazione predefinita, le stringhe C# sono codificate in UTF-16, mentre la codifica delle stringhe su Internet è UTF-8. Per ridurre al minimo il sovraccarico di prestazioni nella conversione, ora è possibile semplicemente aggiungere un suffisso u8 alle tue stringhe letterali per ottenerle immediatamente in UTF-8.

var u8 = "This is a UTF-8 string!"u8

Valori letterali stringa non elaborati

I valori letterali stringa non elaborati sono un nuovo formato in C# 11. Questi valori possono contenere testo arbitrario, tra cui spazi vuoti, nuove righe, virgolette incorporate e altri caratteri speciali senza richiedere sequenze di escape. Un valore letterale stringa non elaborato inizia e termina con almeno tre caratteri di virgolette doppie (“””).

string longMessage = """
   This is a long message.
   It has several lines.
       Some are indented
               more than others.
   Some should start at the first column.
   Some have "quoted text" in them.
   """;

Attributi generici

È possibile dichiarare una classe generica la cui classe base è System.Attribute. Questa funzionalità offre una sintassi più comoda per gli attributi che richiedono un parametro di System.Type.

public class GenericAttribute<T> : Attribute { }

[GenericAttribute<string>()]
public string Method() => default;

Da notare che è necessario specificare tutti i parametri di tipo quando si applica l’attributo. In altre parole, il tipo generico deve essere completamente costruito.

public class GenericType<T>
{
  [GenericAttribute<T>()] // Not allowed! generic attributes must be fully constructed types.
  public string Method() => default;
}

Conclusioni

Molte altre sono le novità di questa versione di C# 11 e per una più approfondita conoscenza vi rimando alla pagina ufficiale di Microsoft.