where T struct (type valeur)
Contexte : La contrainte where T : struct exige que le paramètre de type soit un type valeur non nullable (int, double, bool, DateTime, enum, etc.). Elle exclut les types référence (classes, interfaces, délégués). Cette contrainte permet d’utiliser des types valeur en toute sécurité.
Exemple d’utilisation
Section intitulée « Exemple d’utilisation »using System;
public class CalculateurNumerique<T> where T : struct{ public T Zero => default(T); // default(T) = 0 pour int, false pour bool, etc.
public T Additionner(T a, T b) { // Pour simplifier, on convertit dynamiquement (pas idéal, mais démonstration) dynamic da = a; dynamic db = b; return da + db; }}
class Program{ static void Main() { var calcInt = new CalculateurNumerique<int>(); Console.WriteLine(calcInt.Additionner(5, 3)); // 8
var calcDouble = new CalculateurNumerique<double>(); Console.WriteLine(calcDouble.Additionner(2.5, 1.2)); // 3.7
// Ceci ne compile pas : string est un type référence // var calcString = new CalculateurNumerique<string>(); }}Sortie console
Section intitulée « Sortie console »dotnet run83.7Remarques importantes
Section intitulée « Remarques importantes »structimpliqueSystem.ValueType.- Les types valeur nullables (
int?) ne sont pas autorisés (carNullable<T>est un struct mais avec une contrainte spéciale). - Utile pour les types mathématiques ou les buffers de bas niveau.
Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »System.Nullable<T> – where T : struct garantit que T est un type valeur.
Voir documentation .NET sur la contrainte struct.