Jon*_*gel 8 .net c# enums flags
如果我有一个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)
Hen*_*rik 17
您可以将其投射到int并使用Bit Twiddling Hacks中的技术来检查它是否是2的幂.
int v = (int)enumValue;
return v != 0 && (v & (v - 1)) == 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2483 次 |
| 最近记录: |