c# - Enum.TryParse 和 Enum.IsDefined 为 char 枚举返回 false

标签 c# enums

我的程序如下:

using System;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            char _status = 'C';            
            Console.WriteLine(_status.ToString());            

            if (Enum.IsDefined(typeof(MyStatus), _status.ToString()))
            {
                Console.WriteLine("Yes1");
            }
            else
            {
                Console.WriteLine("No1");
            }

            MyStatus myStatus; 
            if(Enum.TryParse(_status.ToString(), true, out myStatus))
            {
                Console.WriteLine("Yes2");
            }
            else
            {
                Console.WriteLine("No2");
            }
        }

        public enum MyStatus
        {
            None = 'N',
            Done = 'C'
            //Other Enums
        }
    }
}

我期待在我的控制台中显示“Yes1”和“Yes2”,但看起来它为 TryParse 和 IsDefined 返回 false。任何帮助表示赞赏。

可以在 http://rextester.com/CSFG46040 访问代码

更新

该值基本上来自数据库并映射到字符字段。我还需要将它暴露给已经使用此字符字段作为枚举的程序。 Enum.IsDefined 或 Enum.TryParse 只是为了确保我没有得到任何其他会解析为 None 的垃圾字符。

最佳答案

是的,那是因为您的枚举实际上是:

public enum MyStatus
{
    None = 78,
    Done = 67
}

所以“N”既不是枚举值的名称,也不是十进制表示。 “None”和“78”都将解析为 MyStatus.None ,但“N”不会。

听起来您很可能想要一个 Dictionary<char, MyStatus> .如果您想将每个枚举值的数值视为一个字符,您可以使用以下方法构建它:

var dictionary = Enum.GetValues(typeof(MyStatus))
                     .Cast<MyStatus>()
                     .ToDictionary(x => (char) x);

关于c# - Enum.TryParse 和 Enum.IsDefined 为 char 枚举返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379990/

相关文章:

c# - 如何在 asp.net web api 中将图像流式传输到客户端应用程序?

c# - 有没有办法只向特定用户/组公开 .Net Web 服务中的特定 Web 方法?

c# - 通过传递的参数查找枚举值

enums - 有没有办法在没有模式匹配的情况下直接访问枚举结构中的字段值?

c# - 具有 REST/Web API 服务的 Cordova/Phonegap 应用程序的 SVN 和 TFS 结构

c# - WPF : Custom Datagrid inside combobox

Java 枚举中的 NoSuchMethodError

将枚举定义转换为无符号整数

c# - 使用 C# 自定义 WPF 列表框

python - 在 python 中使用具有非整数类型的枚举是一种不好的做法吗?