Maison >développement back-end >C++ >Comment puis-je contourner le manque de contraintes génériques Enum en 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 :
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!