Ardalis.SmartEnum pour C# (.NET) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Ardalis.SmartEnum pour C# (.NET) : guide complet avec exemples

1. Qu'est-ce que c'est et pourquoi l'utiliser ?

Ardalis.SmartEnum est une bibliothèque pour C# (.NET) qui résout l'un des problèmes les plus courants en développement : la difficulté de travailler avec les énumérations (enum). Les énumérations natives de C# ne sont en réalité qu'un ensemble de constantes entières. Elles ne peuvent pas contenir de logique, de champs supplémentaires (comme une description, un code de devise, une couleur) ou de méthodes. Cela conduit à un code gonflé avec des switch ou des if-else, ce qui viole les principes SOLID (notamment le principe Open/Closed) et rend le code moins maintenable.

SmartEnum propose une alternative : les énumérations intelligentes (Smart Enums). Ce sont des classes qui héritent de la classe de base SmartEnum<TEnum, TValue>. Chaque valeur de cette énumération est un champ statique de type singleton. Grâce à cela, vous pouvez ajouter à l'énumération toutes les propriétés souhaitées (Name, Value sont obligatoires, plus toutes les propriétés personnalisées), des méthodes, et même implémenter des interfaces. Cela transforme l'énumération d'un simple ensemble de nombres en un objet à part entière avec un comportement.

Pourquoi en avez-vous besoin ? Premièrement, pour la sécurité de typage. Vous ne pouvez pas assigner accidentellement à une variable une valeur qui n'est pas définie dans l'énumération (contrairement aux enum classiques où l'on peut faire (MyEnum)42). Deuxièmement, pour l'encapsulation de la logique. Au lieu d'écrire des méthodes d'extension ou des classes utilitaires, vous placez la logique directement à l'intérieur de l'énumération. Troisièmement, pour la lisibilité. Le code devient auto-documenté : chaque valeur de l'énumération porte non seulement un nom, mais aussi un contexte.

2. Installation

La bibliothèque s'installe via NuGet. Exécutez l'une des commandes suivantes dans la console du gestionnaire de packages ou dans le terminal .NET CLI :

# Via .NET CLI
dotnet add package Ardalis.SmartEnum

# Via Package Manager Console
Install-Package Ardalis.SmartEnum

Après l'installation, ajoutez using Ardalis.SmartEnum; en haut de votre fichier.

3. Démarrage rapide — exemple minimal fonctionnel

Créons une énumération simple pour les jours de la semaine. Notez que nous héritons de SmartEnum<TEnum, TValue>, où TEnum est notre classe et TValue est le type de la valeur (généralement int ou string).

using Ardalis.SmartEnum;

public sealed class Weekday : SmartEnum<Weekday, int>
{
    // Les champs statiques sont les valeurs de l'énumération
    public static readonly Weekday Monday = new Weekday(nameof(Monday), 1);
    public static readonly Weekday Tuesday = new Weekday(nameof(Tuesday), 2);
    public static readonly Weekday Wednesday = new Weekday(nameof(Wednesday), 3);
    public static readonly Weekday Thursday = new Weekday(nameof(Thursday), 4);
    public static readonly Weekday Friday = new Weekday(nameof(Friday), 5);
    public static readonly Weekday Saturday = new Weekday(nameof(Saturday), 6);
    public static readonly Weekday Sunday = new Weekday(nameof(Sunday), 7);

    // Le constructeur privé est obligatoire
    private Weekday(string name, int value) : base(name, value) { }
}

// Utilisation
public class Program
{
    public static void Main()
    {
        var today = Weekday.Monday;
        Console.WriteLine(today.Name);   // Monday
        Console.WriteLine(today.Value);  // 1

        // Recherche par valeur
        var dayFromValue = Weekday.FromValue(3);
        Console.WriteLine(dayFromValue.Name); // Wednesday

        // Recherche par nom
        var dayFromName = Weekday.FromName("Friday");
        Console.WriteLine(dayFromName.Value); // 5
    }
}

4. Méthodes / fonctions / classes principales

Examinons les fonctionnalités clés

Recommendations