相关疑难解决方法(0)

如何检查是否设置了多个枚举标志?

我只是想知道是否设置了一个枚举标志,而不是哪个.我目前的想法是检查它是否是2的幂.在枚举类型中有更好的方法吗?

[Flags]
enum Foo
{
Flag1 = 0x01,
Flag2 = 0x02,
Flag3 = 0x04,
Flag4 = 0x08,
Flag5 = 0x10,
Flag6 = 0x20,
Flag7 = 0x40,
Flag8 = 0x80
}

private bool ExactlynOneFlagSet(Foo myFoo)
{
  var x = (byte) myFoo;
  return (x != 0) && ((x & (x - 1)) == 0); //Check if a power of 2
}

if(!ExactlynOneFlagSet(Foo myFoo))
{
   //Do something
}
Run Code Online (Sandbox Code Playgroud)

c# enums

35
推荐指数
3
解决办法
8358
查看次数

检查枚举是否包含多个标志

我正在尝试检查“枚举实例”是否包含多个标志。

[Flags]
public enum Foo 
{
  Bar = 1,
  Far = 2
}
Run Code Online (Sandbox Code Playgroud)
var multiState = Foo.Bar | Foo.Far;

MoreThanOneFlag(multiState); // True

var singleState = Foo.Bar;

MoreThanOneFlag(singleState); // False

Run Code Online (Sandbox Code Playgroud)

另外我真的不想使用类似下面的东西:

var state = Foo.Bar | Foo.Far;

Console.WriteLine(state.ToString().Count(x => x == ',') > 0); // True

Run Code Online (Sandbox Code Playgroud)

请注意,我不关心“实例”包含哪些标志,我只想知道是否有多个标志。

c# enums enum-flags

5
推荐指数
1
解决办法
3212
查看次数

标签 统计

c# ×2

enums ×2

enum-flags ×1