[英]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.