簡體   English   中英

c#中的int是否有類型安全的枚舉轉換?

[英]Is there a typesafe enum conversion from int in c#?

我知道我可以使用強制轉換將int轉換為枚舉

MyEnumType myEnum = (MyEnumType) myInteger;

這里的問題是如果myInteger不是int類型,運行時強制轉換不會在構建時停止我

void MyMethod(MyObject myObject)
{
    MyEnumType myEnum = (MyEnumType) myObject.someProperty;
    ....
}

以上不是一個不常見的代碼模式,但如果對象的屬性類型已更改,它將無法在構建時保護我。

是否有內置方法來執行此轉換,這會給我一個構建時錯誤? 當然,我可以很容易地編寫一個通用的方法,但我想知道是否內置了一個。

您可以輕松地創建一個方法來為您的一個枚舉執行此操作:

public static MyEnumType CastFromInt<T>(int n)
{
    return (MyEnumType)n;
}

遺憾的是,因為沒有辦法應用泛型約束,因此泛型類型參數是枚舉,所以沒有好的方法來對它進行泛化。 你可以寫這樣的東西:

public static T CastFromInt<T>(int n)
{
    return (T)(object)n;
}

但是假設調用者使用枚舉作為T的類型。 如果他們不這樣做,那就有問題了。 這也是不必要的整數。

您可以使用

Enum.TryParse(myInteger.ToString(), out result)

獲取int的Enum值。

希望這可以幫助,

暫無
暫無

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

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