【发布时间】:2015-02-02 04:33:56
【问题描述】:
考虑以下枚举:
[Flags]
public enum EnumWithUniqueBitFlags
{
None = 0,
One = 1,
Two = 2,
Four = 4,
Eight = 8,
}
[Flags]
public enum EnumWithoutUniqueFlags
{
None = 0,
One = 1,
Two = 2,
Four = 4,
Five = 5,
}
第一个具有这样的值,任何组合都会产生唯一的位组合,而第二个则不会。我需要以编程方式确定这一点。到目前为止,我只检查了每个值是否是 2 的幂,但是由于这段代码将用于消耗其他人开发的 Enum,因此并不实用。
var values = Enum.GetValues(typeof(TEnum)).OfType<TEnum>().ToList();
for (int i = 0; i < values.Count; i++)
{
if (((int) ((object) values [i])) != ((int) Math.Pow(2, i)))
{
throw (new Exception("Whatever."));
}
}
与上面的代码相反,如何以编程方式确定以下 Enum 满足位组合唯一性目标(不假设值是 2 的幂等)?
[Flags]
public enum EnumWithoutUniqueFlags
{
Two = 2,
Four = 9,
Five = 64,
}
请忽略枚举来自哪个整数类型以及值可能为负的事实。
【问题讨论】:
-
一个标志枚举定义的值不是 2 的幂是常见的 - 命名为以 2 的幂定义的状态的叠加的状态可能很有用。
标签: c# .net enums bit-manipulation