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

以上是关于C#:按字符串获取枚举值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Java中的字符串值中获取枚举值

C# 数字枚举值作为字符串

Swift 学习- 09 -- 枚举

当字符串中有空格时,是否可以通过字符串获取枚举?

怎么根据一个值获取它在枚举里的值?

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]