我的程序如下:
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只是为了确保我没有得到任何其他可以解析为无的垃圾字符。
答案 0 :(得分:7)
是的,那是因为你的枚举是有效的:
public enum MyStatus
{
None = 78,
Done = 67
}
所以" N"既不是枚举值的名称,也不是十进制表示。两者都是"无"和" 78"将解析为MyStatus.None
,但是" N"韩元'吨
听起来你很可能想要Dictionary<char, MyStatus>
。如果要将每个枚举值的数值视为char,可以使用以下命令构建它:
var dictionary = Enum.GetValues(typeof(MyStatus))
.Cast<MyStatus>()
.ToDictionary(x => (char) x);
答案 1 :(得分:3)
除了Jon's Answers之外,根据文档Char is also not a valid base type for c# enums。
摘录:
枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong。
我认为Char是自动Implicitly converted to another type。
答案 2 :(得分:3)
Enum.TryParse
用于解析枚举元素的 Names 或基础数值的字符串表示(例如"123"
的{{1}})。如果您已将实际值设为123
,则可以使用强制转换:
char
如果您担心它可能不是有效值之一,可以将其与char _status = 'C'
var status = (MyStatus)_status;
结合使用:
Enum.IsDefined()