Enum.IsDefined为字符串返回false

shA*_*A.t 8 c# enums

我用这个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()));
    }
} 
Run Code Online (Sandbox Code Playgroud)

C#小提琴演示
结果:

True
False
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我要False进入第二种情况.任何帮助表示赞赏.

Pet*_*iho 20

将字符串传递给IsDefined()方法时,您询问枚举是否存在具有该名称的值.文件内容如下:

value参数可以是以下任何一种:
•任何类型为enumType的成员.
•一个变量,其值为enumType类型的枚举成员.
枚举成员名称的字符串表示形式.字符串中的字符必须与枚举成员名称具有相同的大小写.
•enumType的基础类型的值.

(强调我的)

阅读有点令人困惑,因为第一,第二和第四选项首先导致相同的事情:传递的枚举类型的值(当然是盒装的).

但第三个选项是你的场景发生了什么,字符串需要与枚举成员的名称相匹配.你传递的是字符串"1",枚举中唯一有效的名字是"Zero""One".字符串"1"与其中任何一个都不匹配,因此IsDefined()返回false.


Cod*_*shi 5

如果传递一个字符串作为参数,它将查看枚举的名称之一是否等于指定的字符串.以下将返回true:

Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1));
Console.WriteLine(Enum.IsDefined(typeof(YourEnum), "Zero"));
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅源代码(第1503行).话虽如此,最好从文档中推断出这些信息,因为@Peter Duniho的回答已经显示,因为实现可以改变:但是,如果你好奇,源代码就在那里.