考慮以下 C#代碼:
enum Beer { Bud = 10, Stella = 20, Unknown }
通常,期望轉換枚舉範圍之外的整數,如下所示,會拋出異常:
int i = 50; var b = (Beer)i;
但是,上面的程式碼不會拋出異常,而是向控制台輸出'50'。
這是由於.NET Framework 中的設計決策。枚舉由另一種值類型(int、short、byte 等)支持,因此可以具有對這些值類型有效的任何值。
雖然行為可能會令人困惑,它還允許創建“位標誌”枚舉,其中二進制模式用於表示枚舉值內的不同標誌組合。明確定義每個可能的標誌組合將是乏味的。
為了解決未定義枚舉值的問題,建議使用快速失敗的實用方法,例如:
public static class EnumUtil<T> { public static T DefinedCast(object enumValue) { if (!System.Enum.IsDefined(typeof(T), enumValue)) throw new InvalidCastException(enumValue + " is not a defined value for enum type " + typeof(T).FullName); return (T)enumValue; } }
此方法會拋出異常如果沒有為枚舉類型定義強制轉換值,則會出現異常。
以上是為什麼在 C# 中將 Int 轉換為無效的枚舉值不會引發例外狀況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!