假设我们定义了一个Planets
枚举:
public enum Planets
{
Sun = 0,
Mercury=5,
Venus,
Earth,
Jupiter,
Uranus,
Neptune
}
我曾使用
Enum.IsDefined
方法来确定字符串是否存在于枚举类型中。Enum.IsDefined(typeof(Planets), "Mercury"); // result is true
但是,之后我尝试了这个方法,它也返回了true:
Enum.IsDefined(typeof(Planets), 5); // result is true again
这个方法怎么实现的?它没有任何重载,只有一个签名:
Enum.IsDefined(Type enumType, object value);
为什么和如何使用
Enum.IsDefined
搜索名称和值?这对我来说非常有意思,他们为什么选择这种方式呢?在我看来,制作重载函数会是更好的选择,不是吗?
http://referencesource.microsoft.com/
的存在。对我来说很有趣,他们是否检查输入的类型?从这个方法看来似乎是的。 - Farhad JabiyevType.IsEnumDefined
方法的实现中所看到的那样,它通过使用if(valueType.IsEnum)
、if(valueType == typeof(string))
和if(Type.IsIntegerType(valueType))
来检查其类型。 - Soner Gönül