Opérations sur les bits courantes dans les énumérations C#
Cet article vise à aider les développeurs à comprendre les opérations courantes sur les bits d'énumération en C#.
Question :
Lorsque vous effectuez des opérations au niveau des bits dans les énumérations, il est toujours difficile de savoir comment définir, effacer, basculer ou tester des bits individuels. Ces opérations ne sont pas couramment utilisées et sont donc faciles à oublier. Une « aide-mémoire sur les opérations sur bits » sera très utile.
Exemple :
<code class="language-csharp">flags = flags | FlagsEnum.Bit4; // 设置第 4 位。</code>
ou
<code class="language-csharp">if ((flags & FlagsEnum.Bit4) == FlagsEnum.Bit4) // 是否有更简洁的方法?</code>
Pouvez-vous fournir des exemples pour toutes les autres opérations courantes ? Il est préférable d'utiliser la syntaxe C# et les énumérations [Flags]
.
Réponse :
Pour résoudre ce problème, certains développeurs ont créé des méthodes d'extension qui étendent System.Enum
et ces méthodes sont plus pratiques à utiliser.
<code class="language-csharp">namespace Enum.Extensions { public static class EnumerationExtensions { public static bool Has<T>(this System.Enum type, T value) { try { return (((int)(object)type & (int)(object)value) == (int)(object)value); } catch { return false; } } public static bool Is<T>(this System.Enum type, T value) { try { return (int)(object)type == (int)(object)value; } catch { return false; } } public static T Add<T>(this System.Enum type, T value) { try { return (T)(object)(((int)(object)type | (int)(object)value)); } catch (Exception ex) { throw new ArgumentException( string.Format( "无法将值添加到枚举类型 '{0}'。", typeof(T).Name ), ex); } } public static T Remove<T>(this System.Enum type, T value) { try { return (T)(object)(((int)(object)type & ~(int)(object)value)); } catch (Exception ex) { throw new ArgumentException( string.Format( "无法从枚举类型 '{0}' 中移除值。", typeof(T).Name ), ex); } } } }</code>
Ces méthodes peuvent être utilisées comme ceci :
<code class="language-csharp">SomeType value = SomeType.Grapes; bool isGrapes = value.Is(SomeType.Grapes); // true bool hasGrapes = value.Has(SomeType.Grapes); // true value = value.Add(SomeType.Oranges); value = value.Add(SomeType.Apples); value = value.Remove(SomeType.Grapes); bool hasOranges = value.Has(SomeType.Oranges); // true bool isApples = value.Is(SomeType.Apples); // false bool hasGrapes = value.Has(SomeType.Grapes); // false</code>
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!