我的程序如下:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的控制台中期待"Yes1"和"Yes2",但看起来它为TryParse和IsDefined返回false.任何帮助表示赞赏.
可以在http://rextester.com/CSFG46040上访问该代码
更新
该值基本上来自数据库并被映射到字符字段.我还需要将它暴露给已经使用此字符字段作为枚举的程序.Enum.IsDefined或Enum.TryParse只是为了确保我没有得到任何其他可以解析为None的垃圾字符.
是的,那是因为你的枚举是有效的:
public enum MyStatus
{
None = 78,
Done = 67
}
Run Code Online (Sandbox Code Playgroud)
因此"N"既不是枚举值的名称,也不是十进制表示."无"和"78"都会解析MyStatus.None,但"N" 不会解析.
听起来你很可能想要一个Dictionary<char, MyStatus>.如果要将每个枚举值的数值视为char,可以使用以下命令构建它:
var dictionary = Enum.GetValues(typeof(MyStatus))
.Cast<MyStatus>()
.ToDictionary(x => (char) x);
Run Code Online (Sandbox Code Playgroud)
Enum.TryParse用于解析枚举元素的名称或基础数值的字符串表示形式(例如"123"for 123)。如果您已经拥有实际值 a char,则可以使用强制转换:
char _status = 'C'
var status = (MyStatus)_status;
Run Code Online (Sandbox Code Playgroud)
如果您担心它可能不是有效值之一,您可以将其与Enum.IsDefined():
if (Enum.IsDefined(typeof(MyStatus), (int)_status))
{
var status = (MyStatus)_status;
Console.WriteLine(status);
}
else
{
Console.WriteLine("Not a valid value.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |