Pièges des types nullables en C# : quand T? n'est pas ce que vous pensez

2025-08-29

La réutilisation de la syntaxe `T?` en C# pour les types valeur nullables et les types référence nullables crée une confusion. Pour les types valeur, `T?` est du sucre syntaxique pour `Nullable`, représentant des types distincts. Cependant, pour les types référence, `T?` est simplement un marqueur d'intention ; après compilation, `T?` et `T` sont du même type. Cette différence conduit à des erreurs de compilation lors de l'écriture de méthodes génériques. L'article démontre ce problème avec une méthode `SelectNotNull` imitant le `List.choose` de F#. La solution implique la surcharge de méthodes avec des contraintes de type (`where TR : class` et `where TR : struct`) pour lever l'ambiguïté entre les types valeur et référence. Bien que le problème soit résolu, la conception reste peu élégante.

Développement Types Nullables