Maison >développement back-end >C++ >Comment puis-je contourner le manque de contraintes génériques Enum en C# ?

Comment puis-je contourner le manque de contraintes génériques Enum en C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-19 06:02:08611parcourir

How Can I Work Around the Lack of Enum Generic Constraints in C#?

Résoudre le problème des contraintes génériques d'énumération manquantes en C#

C# manque de contraintes génériques d'énumération, ce qui crée des limitations lors de la création de méthodes d'extension pour les énumérations. Il existe cependant quelques solutions de contournement.

Une approche recommandée consiste à utiliser la bibliothèque UnconstrainedMelody. La bibliothèque permet de spécifier des "pseudo" contraintes telles que where T : struct, IEnumConstraint, qu'UnconstrainedMelody convertit en where T : struct, System.Enum pendant le processus post-construction.

Une autre solution de contournement consiste à implémenter manuellement la fonctionnalité requise. Par exemple, considérons la méthode IsSet suivante :

<code class="language-csharp">public static bool IsSet<T>(this T input, T matchTo)
    where T : struct // 不是枚举约束
{
    return (input & matchTo) != 0;
}</code>

Lorsque cette méthode est appelée avec plusieurs indicateurs, elle peut ne pas fournir le comportement souhaité car elle vérifie uniquement la présence d'un seul indicateur.

Pour résoudre ce problème, vous pouvez définir une méthode supplémentaire :

<code class="language-csharp">public static bool HasFlags<T>(this T input, params T[] matchTo)
    where T : struct // 不是枚举约束
{
    foreach (var flag in matchTo)
    {
        if ((input & flag) == 0)
            return false;
    }

    return true;
}</code>

Cette méthode parcourt les indicateurs spécifiés et renvoie vrai uniquement si tous les indicateurs sont définis.

Convention de dénomination

La convention de dénomination appropriée pour ces méthodes dépend des préférences. Les options possibles incluent :

  • Comprend
  • Contient
  • HasFlag (ou HasFlags)
  • IsSet

La décision finale peut varier en fonction du contexte spécifique et de l'utilisation de la méthode.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn