【发布时间】:2012-08-11 08:38:20
【问题描述】:
考虑为按位运算设计的FileAttributes 枚举。我创建了一个系统,用户在其中选择一些复选框来确定文件的状态。一个文件可能同时是ReadOnly 和System。因此该值为 5(ReadOnly 为 1,System 为 4 四个)。
如何验证整数是否为有效的FileAttributes 枚举?
我见过这些问题,但它们对我没有帮助,因为它们不适用于按位(标记、组合)值。
Check that integer type belongs to enum member
Is there a way to check if int is legal enum in C#?
【问题讨论】:
-
如果 any 标志组合有效,您可以简单地检查
enum值中设置为 1 的每个位是否是有效的enum项(使用简单的 @ 987654332@ 和按位与)。 -
如果你需要这样的例子,只需查看
Enum.InternalFlagsFormat()方法的源代码(你不会构建字符串,但你会检查该值是否有效)。 -
如果由于某种原因,枚举没有精心设计怎么办?例如它没有
1?在这种情况下,5 返回 true,而 1 不存在。 -
@SaeedNeanmati 您循环遍历 given 值的位。例如,如果枚举具有以下值:2、4、8,而您给出 5,那么您将做的是 a,因为这将导致 1、2、4、8 等。在这种情况下,如果 2、8 等。没有设置,所以他们会跳过。 4 是有效的,但是当您检查“1”(因为它已设置)是否是有效的枚举值时,您会发现它不是。
标签: c# validation bit-manipulation enumeration flags