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 :
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!