簡體   English   中英

C#:通過字符串獲取枚舉值?

[英]C#: Getting an enum value by string?

我正在嘗試從數據庫中的字符串獲取枚舉值,以下是我試圖從中獲取值的枚舉,DB值是字符串。

internal enum FieldType
{
    Star,
    Ghost,
    Monster,
    Trial,
    None
}

這是數據庫部分:

using (var reader = dbConnection.ExecuteReader())
{
    var field = new Field(
        reader.GetString("field_type"),
        reader.GetString("data"),
        reader.GetString("message")
    );
}

現在,我有了為我做的這種方法,但是讓一種方法執行C#已經可以做的事情似乎有些矯kill過正,有人可以告訴我是否有一種方法可以在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);

第一種方法區分大小寫,而第二種則允許您指定區分大小寫。

如何在C#中將字符串轉換為枚舉?

首先定義一個測試字符串:

String text = "Star";

.NET 4.0之前( MSDN參考 ):

// 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參考 ):

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM