如果我有一个enum标记的[Flags],有没有办法在.NET中测试这种类型的值,看它是否只包含一个值?我可以使用位计数得到我想要的结果,但如果可能的话我宁愿使用内置函数.
在enum动态循环遍历值时,Enum.GetValues()也会返回组合标志.enum在以下示例中调用该函数将返回4个值.但是,我不希望内部算法中包含值组合.测试单个enum值的相等性是不合适的,因为它enum可能包含许多值,并且在enum更改中的值时还需要额外的维护.
[Flags]
enum MyEnum
{
One = 1,
Two = 2,
Four = 4,
Seven = One | Two | Four,
}
void MyFunction()
{
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
if (!_HasSingleValue(enumValue)) continue;
// Guaranteed that enumValue is either One, Two, or Four
}
}
private bool _HasSingleValue(MyEnum value)
{
// ???
}Run Code Online (Sandbox Code Playgroud)
我正在尝试检查“枚举实例”是否包含多个标志。
[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)
请注意,我不关心“实例”包含哪些标志,我只想知道是否有多个标志。
所以我有一个标志枚举
public Enum test
{
test1 = 1,
test2 = 2,
test3 = 4,
etc.
}
Run Code Online (Sandbox Code Playgroud)
如何测试那一位,只设置一位?
我以前100%完成了这个,但是我的思绪不是这样的!