我目前正在看书C# 4.0 简而言之顺便说一句,我认为这是一本很棒的书,即使对于高级程序员来说也可以作为很好的参考。
我回顾了有关基础知识的章节,发现了一个技巧,可以在使用标记枚举时判断枚举中是否定义了某个值。
书中指出,使用Enum.IsDefined
不适用于标记的枚举,并建议像这样的解决方法:
static bool IsFlagDefined(Enum e)
{
decimal d;
return (!decimal.TryParse(e.ToString(), out d);
}
如果在标记的枚举中定义了某个值,则应返回 true。
有人可以向我解释为什么这有效吗?
提前致谢 :)
基本上,调用ToString
on any enum
使用声明的类型的值[Flags]
对于任何定义的值,属性都会返回类似这样的内容:
SomeValue, SomeOtherValue
另一方面,如果该值为not定义在enum
输入,然后ToString
将简单地生成该值的字符串表示形式integer值,例如:
5
所以这意味着如果你可以解析输出ToString
作为一个数字(不确定作者为什么选择decimal
),它没有在类型中定义。
这是一个例子:
[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
这样您就可以看到建议的方法是如何工作的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)