首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum.TryParse和Enum.IsDefined返回char Enum的false

Enum.TryParse和Enum.IsDefined返回char Enum的false
EN

Stack Overflow用户
提问于 2016-07-14 16:54:18
回答 3查看 2K关注 0票数 3

我的计划如下:

代码语言:javascript
复制
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的程序中。Enum.IsDefined或Enum.TryParse只是为了确保我不会得到任何其他的垃圾字符,而这些字符都不会给任何人下决心。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-14 17:07:12

Enum.TryParse用于解析枚举元素的名称或底层数值的字符串表示形式(例如,"123"表示123)。如果您已经具有char的实际值,则可以使用强制转换:

代码语言:javascript
复制
char _status = 'C'
var status = (MyStatus)_status;

如果您担心它可能不是有效值之一,则可以将其与Enum.IsDefined()结合起来

代码语言:javascript
复制
if (Enum.IsDefined(typeof(MyStatus), (int)_status))
{
    var status = (MyStatus)_status;
    Console.WriteLine(status);
}
else 
{
    Console.WriteLine("Not a valid value.");
}
票数 3
EN

Stack Overflow用户

发布于 2016-07-14 16:57:11

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

代码语言:javascript
复制
public enum MyStatus
{
    None = 78,
    Done = 67
}

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

听起来你很可能想要一个Dictionary<char, MyStatus>。如果要将每个枚举值的数值作为字符处理,可以使用以下方法构建该值:

代码语言:javascript
复制
var dictionary = Enum.GetValues(typeof(MyStatus))
                     .Cast<MyStatus>()
                     .ToDictionary(x => (char) x);
票数 7
EN

Stack Overflow用户

发布于 2016-07-14 17:00:48

除了乔恩的回答之外,根据文档Char也不是c#枚举的有效基类型。

节选:

枚举的批准类型为:字节、字节、短、ushort、int、uint、long或ulong。

我假设Char是自动的隐式转换为另一种类型

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38379990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档