C#:按字符串获取枚举值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#:按字符串获取枚举值?相关的知识,希望对你有一定的参考价值。
我正在尝试从数据库中的字符串中获取枚举值,下面是我尝试从中获取值的枚举,DB值是一个字符串。
internal enum FieldType
{
Star,
Ghost,
Monster,
Trial,
None
}
继承DB部分:
using (var reader = dbConnection.ExecuteReader())
{
var field = new Field(
reader.GetString("field_type"),
reader.GetString("data"),
reader.GetString("message")
);
}
现在,我有这个方法为我做了,但是让一个方法做一些C#已经可以做的事情似乎有点过头了,有人能告诉我,如果我能在C#语言中做到这一点而不创建我自己的方法吗?
public static FieldType GetType(string Type)
{
switch (Type.ToLower())
{
case "star":
return FieldType.Star;
case "ghost":
return FieldType.Ghost;
case "monster":
return FieldType.Monster;
case "trial":
return FieldType.Trial;
default:
case "none":
return FieldType.None;
}
}
答案
本质上,我相信你需要的是从字符串解析到枚举。如果字符串的值与枚举值匹配(这似乎在这里),这将起作用。
Enum.TryParse(Type, out FieldType myFieldType);
Enum.TryParse(Type, ignoreCase, out FieldType myFieldType);
第一种方法区分大小写,而第二种方法允许您指定区分大小写。
How should I convert a string to an enum in C#?
另一答案
让我们先定义一个测试字符串:
String text = "Star";
在.NET 4.0
(MSDN reference)之前:
// Case Sensitive
FieldType ft = (FieldType)Enum.Parse(typeof(FieldType), text, false);
// Case Insensitive
FieldType ft = (FieldType)Enum.Parse(typeof(FieldType), text, true);
但是使用Enum.Parse
,如果解析过程失败,则必须管理可能引发的异常:
FieldType ft;
try
{
ft = (FieldType)Enum.Parse(typeof(FieldType), text, true);
}
catch (Exception e)
{
ft = FieldType.None;
}
自.NET 4.0
(MSDN reference):
FieldType ft;
// Case Sensitive
if (!Enum.TryParse(text, false, out ft))
ft = FieldType.None;
// Case Insensitive
if (!Enum.TryParse(text, true, out ft))
ft = FieldType.None;
以上是关于C#:按字符串获取枚举值?的主要内容,如果未能解决你的问题,请参考以下文章