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

问题描述 投票:0回答:2

我正在尝试从数据库中的字符串中获取枚举值,下面是我尝试从中获取值的枚举,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;
    }
}
c# .net enums
2个回答
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#?


4
投票

让我们先定义一个测试字符串:

String text = "Star";

.NET 4.0MSDN 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;
© www.soinside.com 2019 - 2024. All rights reserved.