如何有效地验证表示标记枚举的整数?

时间:2012-08-11 08:38:21

标签: c# validation bit-manipulation enumeration flags

考虑为按位运算设计的FileAttributes枚举。我创建了一个系统,用户可以在其中选择一些复选框来确定文件的状态。文件可以是ReadOnlySystem。因此,该值将为5(ReadOnly为1,{4}为4 {。}}。

如何验证整数是否为有效的System枚举?

我已经看到了这些问题,但是他们没有帮助我,因为他们不适用于bitwised(标记,组合)值。

Check that integer type belongs to enum member
Is there a way to check if int is legal enum in C#?

2 个答案:

答案 0 :(得分:5)

  • 在所有合法值上计算累积“或”(可能使用Enum.GetValues)
  • 计算“testValue& ~allValues”
  • 如果非零,则无法通过合并合法标志来形成当前值

答案 1 :(得分:2)

这会奏效。基本上,如果枚举组合无效,ToString()将只返回数字。

private bool CombinationValidForFileAttributes(int value)
{
    return ((FileAttributes)value).ToString() != value.ToString();
}