0

考虑下面的例子,我试图覆盖枚举值,以便能够解析枚举,而不仅仅是大写字母:

    public enum Language
{

    Heb,
    Eng,
    heb = Heb,
    eng = Eng
}

class Program
{
    static void Main(string[] args)
    {
        var e = "heb";
        Language result;

        Enum.TryParse(e, out result);

        Console.WriteLine(result);
        Console.WriteLine(result.ToString());
    }
}

此示例返回:“Heb”“Heb”

另一方面,这个例子:

    public enum Language
{

    Heb,
    Eng,
    heb = Heb,
    eng = Eng,
    None
}

class Program
{
    static void Main(string[] args)
    {
        var e = "heb";
        Language result;

        Enum.TryParse(e, out result);

        Console.WriteLine(result);
        Console.WriteLine(result.ToString());
    }
}

返回 "heb" "heb"

任何想法为什么?

4

1 回答 1

6

当两个枚举值具有相同的表示时,不能保证Enum.ToString. 您可以将测试缩短为Console.WriteLine(Language.Heb);. 由于Hebheb都是有效输出,因此无法保证您得到哪一个。引用Enum.ToString

来电者须知

如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则您的代码不应对该方法将返回哪个名称做出任何假设。例如,以下枚举定义了两个具有相同基础值的成员 Shade.Gray 和 Shade.Grey。

enum Shade
{
    White = 0, Gray = 1, Grey = 1, Black = 2 
}

以下方法调用尝试检索其基础值为 1 的 Shade 枚举成员的名称。该方法可以返回“Gray”或“Grey”,并且您的代码不应对将返回哪个字符串做出任何假设。

string shadeName = ((Shade) 1).ToString("F");
于 2013-06-09T09:58:53.077 回答