我的程序如下:
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/