首页 > 后端开发 > C++ > 为什么在 C# 中将 Int 转换为无效的枚举值不会引发异常?

为什么在 C# 中将 Int 转换为无效的枚举值不会引发异常?

Linda Hamilton
发布: 2025-01-03 04:55:45
原创
189 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板