Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
C# 15 include le nuove funzionalità seguenti. Provare queste funzionalità usando la versione più recente di Visual Studio 2026 Insider o .NET 11 Preview SDK:
C# 15 è la versione di anteprima C# più recente. Le versioni di anteprima di .NET 11 supportano C# 15. Per ulteriori informazioni, vedere versionamento del linguaggio C#.
È possibile scaricare la versione più recente di .NET 11 Preview SDK dalla pagina di download di .NET. È anche possibile scaricare Visual Studio 2026 Insider, che include .NET 11 Preview SDK.
La pagina "Novità in C#" aggiunge nuove funzionalità quando sono disponibili nelle versioni di anteprima pubblica. La sezione working set della pagina di stato della funzionalità roslyn tiene traccia quando le funzionalità future vengono unite nel ramo principale.
È possibile trovare eventuali modifiche di rilievo introdotte in C# 15 nell'articolo sulle modifiche di rilievo.
Annotazioni
Microsoft è interessato ai commenti e suggerimenti su queste funzionalità. Se trovi questioni con una di queste nuove funzionalità, crea un nuovo problema nel repository dotnet/roslyn.
Argomenti dell'espressione di raccolta
È possibile passare argomenti al costruttore o al metodo factory della raccolta sottostante usando un with(...) elemento come primo elemento in un'espressione di raccolta. Questa funzionalità consente di specificare capacità, comparer o altri parametri del costruttore direttamente all'interno della sintassi dell'espressione di raccolta.
Nell'esempio seguente viene illustrato come passare un argomento di capacità a un List<T> costruttore e un comparatore a un HashSet<T> oggetto:
string[] values = ["one", "two", "three"];
// Pass capacity argument to List<T> constructor
List<string> names = [with(capacity: values.Length * 2), .. values];
// Pass comparer argument to HashSet<T> constructor
HashSet<string> set = [with(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
// set contains only one element because all strings are equal with OrdinalIgnoreCase
Per altre informazioni sugli argomenti delle espressioni di raccolta, vedere l'articolo di riferimento sul linguaggio sulle espressioni di raccolta o sulla specifica delle funzionalità. Per informazioni sull'uso degli argomenti dell'espressione di raccolta negli inizializzatori di raccolta, vedere Inizializzatori di oggetti e raccolte.
Tipi unione
C# 15 introduce tipi di unione, che rappresentano un valore che può essere uno dei diversi tipi di case. Dichiarare un'unione con la union parola chiave :
public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);
public union Pet(Cat, Dog, Bird);
Le unioni forniscono conversioni implicite da ogni tipo di caso e il compilatore garantisce che switch le espressioni siano esaustive in tutti i tipi di caso.
Pet pet = new Dog("Rex");
string name = pet switch
{
Dog d => d.Name,
Cat c => c.Name,
Bird b => b.Name,
};
I tipi di unione sono apparsi per la prima volta in .NET 11 Preview 2. Nelle prime anteprime di .NET 11, l'interfaccia UnionAttribute e IUnion non sono incluse nel runtime, quindi è necessario dichiararle nel progetto. Le versioni di anteprima di .NET 11 successive includono questi tipi di runtime. Inoltre, alcune funzionalità della specifica della proposta non sono ancora implementate, inclusi i provider dei membri dell'unione. Queste funzionalità saranno disponibili nelle anteprime future.
Per altre informazioni, vedere Tipi di unione nella guida di riferimento al linguaggio o nella specifica delle funzionalità.