我使用Enum.IsDefined()
方法作为字符串,但我得到False
在我认为我应该得到True
的情况。请检查以下代码:
public enum YourEnum : int
{
Zero = 0,
One = 1
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1));
Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1.ToString()));
}
}
C# Fiddle Demo 结果:
True
False
我不知道为什么我要在第二种情况下得到False
。任何帮助表示赞赏。
将字符串传递给IsDefined()
方法时,您询问枚举中是否有值具有该名称。 The documentation读到:
value参数可以是以下任何一项: •任何类型为enumType的成员。 •一个变量,其值为enumType类型的枚举成员。 •枚举成员名称的字符串表示形式。字符串中的字符必须与枚举成员名称具有相同的大小写。 •enumType的基础类型的值。
(强调我的)
阅读有点令人困惑,因为第一,第二和第四选项首先导致相同的事情:传递的枚举类型的值(当然是盒装的)。
但第三个选项是你的场景发生了什么,字符串需要与枚举成员的名称相匹配。你传递的是字符串"1"
,枚举中唯一有效的名字是"Zero"
和"One"
。字符串"1"
与其中任何一个都不匹配,因此IsDefined()
返回false
。
如果传递一个字符串作为参数,它将查看枚举的名称之一是否等于指定的字符串。以下将返回true:
Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1));
Console.WriteLine(Enum.IsDefined(typeof(YourEnum), "Zero"));
有关更多信息,请参阅source code (line 1503)。话虽如此,最好从文档中推断出这些信息,因为@Peter Duniho的回答已经显示,因为实现可以改变:但是,如果你好奇,源代码就在那里。