Partager via


Nouveautés de C# 15

C# 15 inclut les nouvelles fonctionnalités suivantes. Essayez ces fonctionnalités à l’aide de la dernière version insiders de Visual Studio 2026 ou du Kit de développement logiciel (SDK) .NET 11 preview :

C# 15 est la dernière version en préversion C#. Les versions en préversion de .NET 11 prennent en charge C# 15. Pour plus d’informations, consultez Contrôle de version du langage C#.

Vous pouvez télécharger le dernier SDK .NET 11 en préversion à partir de la page de téléchargements .NET. Vous pouvez également télécharger Visual Studio 2026 Insider, qui inclut le .NET 11 SDK Preview.

La page « Nouveautés en C# » ajoute de nouvelles fonctionnalités lorsqu’elles sont disponibles dans les versions en préversion publique. La section ensemble de travail de la page d’état des fonctionnalités de Roslyn suit le moment où les nouvelles fonctionnalités sont fusionnées dans la branche principale.

Vous trouverez toutes les modifications incompatibles introduites en C# 15 dans notre article sur les changements incompatibles.

Note

Nous sommes intéressés par vos commentaires sur ces fonctionnalités. Si vous rencontrez des problèmes avec l’une de ces nouvelles fonctionnalités, créez un nouveau problème dans le référentiel dotnet/roslyn.

Arguments d'expression de collection

Vous pouvez passer des arguments au constructeur ou à la méthode de fabrique de la collection sous-jacente à l’aide d’un with(...) élément comme premier élément d’une expression de collection. Cette fonctionnalité vous permet de spécifier la capacité, les comparateurs ou d’autres paramètres de constructeur directement dans la syntaxe d’expression de collection.

L’exemple suivant montre comment passer un argument de capacité à un List<T> constructeur et un comparateur à un HashSet<T>:

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

Pour en savoir plus sur les arguments d’expression de collection, consultez l’article de référence de langage sur les expressions de collection ou la spécification de fonctionnalité. Pour plus d’informations sur l’utilisation d’arguments d’expression de collection dans les initialiseurs de collection, consultez Object et Collection Initializers.

Types d'union

C# 15 introduit des types union, qui représentent une valeur qui peut être l’un des types de cas. Déclarez une union avec le union mot clé :

public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);

public union Pet(Cat, Dog, Bird);

Les unions fournissent des conversions implicites à partir de chaque type de cas, et le compilateur garantit que switch les expressions sont exhaustives dans tous les types de cas :

Pet pet = new Dog("Rex");

string name = pet switch
{
    Dog d => d.Name,
    Cat c => c.Name,
    Bird b => b.Name,
};

Les types Union apparaissent d’abord dans .NET 11 Preview 2. Dans les versions préliminaires de .NET 11, les interfaces UnionAttribute et IUnion ne sont pas incluses dans le runtime, vous devez donc les déclarer dans votre projet. Les versions préliminaires de .NET 11 ultérieures incluent ces types d’exécution. En outre, certaines fonctionnalités de la spécification de la proposition ne sont pas encore implémentées, y compris les fournisseurs membres de l’union. Ces fonctionnalités seront disponibles dans les prochaines préversions.

Pour plus d’informations, consultez les types d'union dans la référence linguistique ou la spécification des fonctionnalités.