首頁 > 後端開發 > C++ > 為什麼在 C# 中將 Int 轉換為無效的枚舉值不會引發例外狀況?

為什麼在 C# 中將 Int 轉換為無效的枚舉值不會引發例外狀況?

Linda Hamilton
發布: 2025-01-03 04:55:45
原創
183 人瀏覽過

Why Doesn't Casting an Int to an Invalid Enum Value in C# Throw an Exception?

將 Int 轉換為無效的枚舉值不會引發異常

考慮以下 C#代碼:

enum Beer
{
    Bud = 10,
    Stella = 20,
    Unknown
}
登入後複製

通常,期望轉換枚舉範圍之外的整數,如下所示,會拋出異常:

int i = 50;
var b = (Beer)i;
登入後複製

但是,上面的程式碼不會拋出異常,而是向控制台輸出'50'。

NET Framework 行為

這是由於.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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板