加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Enum.Parse()时出现意外结果

发布时间:2020-12-15 23:51:33 所属栏目:百科 来源:网络整理
导读:class Program{ static void Main(string[] args) { String value = "Two"; Type enumType = typeof(Numbers); Numbers number = (Numbers)Enum.Parse(enumType,value); Console.WriteLine(Enum.Parse(enumType,value)); } public enum Numbers : int { One,
class Program
{
    static void Main(string[] args)
    {
        String value = "Two";
        Type enumType = typeof(Numbers);
        Numbers number = (Numbers)Enum.Parse(enumType,value);
        Console.WriteLine(Enum.Parse(enumType,value));
    }

    public enum Numbers : int
    {
        One,Two,Three,Four,FirstValue = 1
    }
}

这是我在应用程序中使用的枚举的简化版本.为什么某些枚举名称没有值的原因是因为我使用其名称作为参数执行Enum.Parse,而具有值的值则从int解析.

如果您单步执行上面的代码并调查’number’变量,您会看到它实际上是’Two’,但控制台中的输出是’FirstValue’.此时我看不出原因,是吗?

好的,解决方案很简单 – 只需给无价值的枚举值.但我仍然很好奇.

解决方法

我怀疑FirstValue和Two的内部值都是1,所以系统不知道输出哪个字符串.

public enum Numbers : int
{
    One,// defaults to 0
    Two,// defaults to 1
    Three,// defaults to 2
    Four,// defaults to 3
    FirstValue = 1 // forced to 1
}

每个枚举值都有一个唯一的整数值,但每个整数值都没有唯一的枚举值.

当您解析“two”时,它将在内部存储为整数1.然后当您尝试将其转换回字符串时,根据用于查找该名称的技术,您可以获得“Two”或“FirstValue”.正如您所说,解决方案是为每个枚举值赋予一个定义的整数值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读