【发布时间】:2011-02-09 20:21:29
【问题描述】:
我目前正在阅读《C# 4.0 in a Nutshell》这本书,顺便说一句,我认为这本书非常好,即使是高级程序员也可以作为很好的参考。
我在回顾有关基础知识的章节时,遇到了一个技巧,可以判断在使用标记枚举时是否在枚举中定义了某个值。
该书指出,使用Enum.IsDefined 不适用于标记的枚举,并建议使用这样的解决方法:
static bool IsFlagDefined(Enum e)
{
decimal d;
return (!decimal.TryParse(e.ToString(), out d);
}
如果在标记的枚举中定义了某个值,这应该返回 true。
有人可以向我解释一下为什么会这样吗?
提前致谢:)
【问题讨论】:
-
顺便说一句,Enum.IsDefined 的行为可能与预期不同(或者可能是默认值(T))。 Enum.IsDefined(default(T)) 可以返回 true 和 false。 default(T)(其中 T 是一个枚举)总是返回 (T)0,因此如果 T 没有 (T)0 的有效值,则结果为 false。至少让我失望过一次