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
Libérer: 2025-01-19 06:02:08
original
653 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal