为了我的一生,我不记得如何在位域中进行设置,删除,切换或测试。我不确定还是将它们混在一起,因为我很少需要这些。因此,拥有一个“位备忘单”将是不错的选择。 例如: flags = flags | FlagsEnum.Bit4; // Set bit 4. 要么 if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way? 您能否给出所有其他常见操作的示例,最好使用[Flags]枚举以C#语法显示?
假设我有这个枚举: [Flags] enum Letters { A = 1, B = 2, C = 4, AB = A | B, All = A | B | C, } 要检查是否AB设置了例如我可以这样做: if((letter & Letters.AB) == Letters.AB) 有没有一种比以下方法更简单的方法来检查是否设置了组合标志常量的任何标志? if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B) 例如,您可以将它换成&其他东西吗? 像这样的二进制东西不太稳定...
我正在尝试编写一个脚本,该脚本将检查两个错误标志,并且如果一个(或两个)标志被更改,它将回显-发生错误。我的剧本: my_error_flag=0 my_error_flag_o=0 do something..... if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then echo "$my_error_flag" else echo "no flag" fi 基本上应该是这样: if ((a=1 or b=2) or (a=1 and b=2)) then display error else no error fi 我得到的错误是: line 26: conditional binary operator expected line 26: …
我想要做的是这样的:我有带有组合标记值的枚举。 public static class EnumExtension { public static bool IsSet<T>( this T input, T matchTo ) where T:enum //the constraint I want that doesn't exist in C#3 { return (input & matchTo) != 0; } } 因此,我可以这样做: MyEnum tester = MyEnum.FlagA | MyEnum.FlagB if( tester.IsSet( MyEnum.FlagA ) ) //act on …
我在应用程序中使用Enum标志。枚举可以包含大约50个以上的值,因此值最多为2 ^ 50。我只是想知道,我可以Math.Pow(2, variable)用来计算这些吗? 当我尝试这样做时,我得到一个常量值编译时错误。除了手动计算这些2的幂并将其放入之外,还有其他方法吗? 这是我在做什么: [Flags] internal enum RiskStates : long { None = 0, AL = Convert.ToInt64(Math.Pow(2,0)), AK = 2, AZ = 4, AR = 8, CA = 16, CO = 32, CT = 64, DC = 128, DE = 256, FL = 512, GA = 1024, HI …