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

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

Patricia Arquette
Patricia Arquetteoriginal
2025-01-19 07:06:09711parcourir

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

Alternative C# aux contraintes génériques d'énumération

En programmation C#, le manque de contraintes génériques d'énumération peut créer des défis lorsque l'on tente d'effectuer certaines opérations sur les énumérations de drapeaux. Pour résoudre ce problème, examinons une solution de contournement utilisant la bibliothèque UnconstrainedMelody.

UnconstrainedMelody convertit les contraintes génériques "pseudo" en contraintes "réelles". Par exemple, ce serait :

<code>where T : struct, IEnumConstraint</code>

Convertir en :

<code>where T : struct, System.Enum</code>

Cela permet aux développeurs de définir des méthodes telles que :

<code>public static bool IsSet<T>(this T input, T matchTo)
    where T : System.Enum
{
    return (input & matchTo) != 0;
}</code>

En utilisant cette méthode, vous pouvez :

<code>MyEnum tester = MyEnum.FlagA | MyEnum.FlagB;

if (tester.IsSet(MyEnum.FlagA))
    // 对标志 a 执行操作</code>

UnconstrainedMelody s'intègre de manière transparente une fois les étapes post-construction terminées.

Cependant, considérez le comportement de la méthode 'IsSet' lorsque plusieurs indicateurs sont spécifiés :

<code>tester.IsSet(MyFlags.A | MyFlags.C);</code>

Devrait-il vérifier si tous les drapeaux sont activés, ou un seul ? Le comportement recommandé consiste à vérifier tous les indicateurs.

UnconstrainedMelody propose plusieurs options de dénomination pour cette méthode :

  • Comprend
  • Contient
  • HasFlag/HasFlags
  • IsSet

Bien que le nom « IsSet » fonctionne, les commentaires sont les bienvenus. Veuillez garder à l'esprit que cette solution de contournement est susceptible de changer et UnconstrainedMelody accepte les correctifs ou les soumissions directes.

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