gpt4 book ai didi

c# - 测试单个值的 [Flags] 枚举值

转载 作者:太空狗 更新时间:2023-10-29 18:15:41 26 4
gpt4 key购买 nike

如果我有一个用 [Flags] 标记的 enum,.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)
{
// ???
}



相关:StackOverflow: Enum.IsDefined on combined flags

最佳答案

您可以将其转换为 int 并使用 Bit Twiddling Hacks 中的技术检查它是否是二的幂。

int v = (int)enumValue;
return v != 0 && (v & (v - 1)) == 0;

关于c# - 测试单个值的 [Flags] 枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1662144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com