Microsoft a dévoilé de nouvelles fonctionnalités disponibles en version préliminaire pour C# 15, la version qui arrivera avec .NET 11. La mise à jour comprend les types union, les hiérarchies fermées et une version préliminaire du modèle mis à jour de gestion du code non sécurisé, ainsi que des changements plus modestes visant à réduire le code procédural répétitif dans l’utilisation quotidienne.
Arguments dans les expressions de collection
Les expressions de collection en C# peuvent convertir des valeurs en plusieurs types de collections, mais elles ne permettaient auparavant pas de transmettre d’arguments au constructeur principal ou à la fonction de création. C# 15 ajoute un nouvel élément sous la forme de with(...), placé au début de l’expression, afin de transmettre ces arguments.
Cela permet par exemple de créer une liste en définissant directement sa capacité dans l’expression, ou de créer un HashSet en lui transmettant StringComparer.OrdinalIgnoreCase, au lieu de séparer la création de l’ajout des éléments. Microsoft indique que cette fonctionnalité prépare le terrain pour la syntaxe des expressions de dictionnaire attendue, qui devra probablement spécifier l’outil de comparaison utilisé pour les clés.
Accès aux éléments au moyen d’index étendus
Après que C# 14 a ajouté des membres d’extension pour les propriétés et les opérateurs en plus des méthodes, C# 15 étend ce modèle aux index étendus. Il devient ainsi possible d’accéder à un élément d’un objet récepteur comme si l’index était défini à l’origine dans son type.
Dans l’exemple présenté par Microsoft, l’accès à un élément de IEnumerable<int> nécessitait une méthode auxiliaire telle que ElementAtIndex. La nouvelle syntaxe permet quant à elle d’utiliser numbers[2] au moyen d’un index étendu associé au récepteur. Le blog précise que les index ne peuvent pas être statiques ; le conteneur d’extension doit donc inclure un récepteur nommé.
Nommage des boucles break et continue
C# 15 permet de nommer les boucles d’itération, puis de leur diriger directement un break ou un continue. Cette possibilité est utile dans les boucles imbriquées, où sortir de la boucle externe nécessitait généralement une variable booléenne, l’utilisation de goto ou le déplacement de la logique dans une fonction distincte.
En pratique, le nom rend la cible de sortie explicite dans le code et élimine le besoin d’une variable servant à suivre si l’élément recherché a été trouvé. L’exemple présente une boucle nommée scan, dont il est possible de sortir directement à l’aide de break scan.
Qu’est-ce qui change pour les développeurs ?
Ces fonctionnalités ne modifient pas tant le modèle d’exécution de .NET qu’elles ne réorganisent la syntaxe du code et réduisent certains modèles répétitifs. Leur valeur est particulièrement visible dans les projets qui utilisent des expressions de collection, traitent des boucles imbriquées ou ont besoin d’interfaces d’accès plus concises pour les types extensibles.
Ces fonctionnalités étant toujours en version préliminaire, elles ne constituent pas encore une interface finale stable. Microsoft invite les développeurs à télécharger .NET 11 et à tester C# 15 sur leurs applications, tout en consultant la référence complète des nouveautés et en participant aux discussions en cours au sein du projet csharplang. La source de cet article ne précise pas de date définitive pour la transformation des fonctionnalités en version stable.