C#:按字符串获取枚举值?

时间:2017-12-16 12:30:21

标签: c# .net enums

我试图从数据库中的字符串中获取枚举值,下面是我试图从中获取值的枚举,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;
    }
}

2 个答案:

答案 0 :(得分:4)

从本质上讲,我相信你需要的是从字符串解析到枚举。如果字符串的值与枚举值匹配(这似乎在这里),这将起作用。

Enum.TryParse(Type, out FieldType myFieldType);


Enum.TryParse(Type, ignoreCase, out FieldType myFieldType);

第一种方法区分大小写,而第二种方法允许您指定区分大小写。

How should I convert a string to an enum in C#?

答案 1 :(得分:4)

首先定义测试字符串:

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.0MSDN 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;