【发布时间】:2013-11-13 17:45:29
【问题描述】:
我知道我可以使用强制转换将 int 转换为枚举
MyEnumType myEnum = (MyEnumType) myInteger;
这里的问题是,如果 myInteger 不是 int 类型,则运行时转换不会阻止我在构建时进行操作
void MyMethod(MyObject myObject)
{
MyEnumType myEnum = (MyEnumType) myObject.someProperty;
....
}
上述代码模式并不少见,但如果对象的属性类型已更改,它不会在构建时保护我。
是否有一种内置方法来进行这种转换,这会给我一个构建时错误?当然,我可以很容易地编写一个通用方法,但我想知道是否内置。
【问题讨论】:
-
即使这是可能的,当执行仅在运行时已知的值的强制转换时,您怎么能期望得到构建时错误?您希望从哪些其他“非 int”类型转换?您不能将任意对象强制转换为枚举。
-
@JeffMercado 我希望不来执行演员阵容。类型化的方法会给我编译时反馈,因为我不依赖演员表。
-
我认为“Enum.TryParse(myInteger.ToString())”应该可以工作。 (高清修复,这里没办法测试)。
-
@Servy 是的,这正是我的观点。我不希望我的代码编译。但如果
someProperty是object类型,那么它将编译。 -
鉴于枚举可以是任何整数类型(byte、sbyte、short、ushort、int、uint、long 或 ulong),因此无法在编译时检查溢出,那么为什么要检查类型呢?
标签: c# casting enums compiler-errors