基本上,在使用[Flags]属性声明的类型的任何枚举值上调用ToString将为任何定义的值返回类似的内容:
SomeValue, SomeOtherValue
另一方面,如果未在枚举类型中定义该值,则ToString将仅生成该值的整数值的字符串表示,例如:
5
所以这意味着如果你可以将ToString的输出解析为数字(不确定作者选择十进制的原因),则不会在类型中定义它.
这是一个例子:
[Flags]
enum SomeEnum
{
SomeValue = 1,
SomeOtherValue = 2,
SomeFinalValue = 4
}
public class Program
{
public static void Main()
{
// This is defined.
SomeEnum x = SomeEnum.SomeOtherValue | SomeEnum.SomeFinalValue;
Console.WriteLine(x);
// This is not (no bitwise combination of 1, 2, and 4 will produce 8).
x = (SomeEnum)8;
Console.WriteLine(x);
}
}
上述程序的输出是:
SomeOtherValue, SomeFinalValue
8
所以你可以看到建议的方法是如何工作的.