考虑以下 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中文网其他相关文章!