簡體   English   中英

我可以從泛型類型轉換為C#中的枚舉嗎?

[英]Can I cast from a generic type to an enum in C#?

我正在編寫一個實用程序函數,它從數據庫中獲取一個整數,並將一個類型化的枚舉返回給應用程序。

這是我試圖做的(注意我傳入一個數據讀取器和列名而不是我真實函數中的int ):

public static T GetEnum<T>(int enumAsInt)
{
    Type enumType = typeof(T);

    Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);
    if (Enum.IsDefined(enumType, value) == false)
    {
        throw new NotSupportedException("Unable to convert value from database to the type: " + enumType.ToString());
    }

    return (T)value;
}

但它不會讓我(T)value說:

無法將類型'System.Enum'轉換為'T'。

另外,我已經閱讀了很多關於使用Enum.IsDefined評論。 表現明智,聽起來很糟糕。 我怎樣才能保證有效價值?

像這樣:

return (T)(object)value;

改變這個:

Enum value = (Enum)Enum.ToObject(enumType, enumAsInt);

對此:

T value = (T)Enum.ToObject(enumType, enumAsInt);

並刪除演員:)

有關信息,可以使用C#7.3及更高版本中的通用約束Enum

暫無
暫無

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

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