enum MyEnum
{
Invalid=0,
Value1=1,
Value1=2,
}
void main ()
{
MyEnum e1 = MyEnum.Value1;
int i1 = 2;
// Is there any difference how to compare enumEration values with integers?
if ( e1==(MyEnum)i1 )... // 1st
if ( (int)e1==i1 )... // 2nd
在上面提到的每一种情况下,我们都有枚举到int或int到枚举的转换。
这些转换(性能,任何其他)有什么不同吗?或者它们完全相同?
谢谢。
注:在当前示例中,我比较"幻数",但在实际应用中,我从数据库的整型字段中获取数据。
7条答案
按热度按时间wqlqzqxt1#
这能帮上忙。
ftf50wuq2#
不管你使用哪一个,它们的执行都是一样的。如果没有整数值的枚举,.net会在运行时创建一个。不可能有例外。
然而,李希晨是正确的--为什么要比较枚举和整数值?
hgncfbus3#
我建议当你从数据库中读取枚举值时,将int类型转换为代表性的枚举值,这将大大提高代码的可读性。
91zkwejq4#
它们是完全相同的。使用“调试”、“窗口”、“反汇编”(Ctrl-Alt-D)显示生成的IL将为您提供:
mmvthczy5#
我会选择第二种方法。对我来说,它更有逻辑意义。如果
i2
超出范围,它将消除运行时异常。6pp0gazn6#
Net中的枚举实际上只是基本整型类型上的漂亮元结构。(默认情况下,该类型为int。)如果您查看枚举的生成IL,您会发现它实际上是一个标准类型,每个特定枚举元素都有几个静态字段。因此,枚举可以透明地在整型类型之间强制转换。
相关答案
hl0ma9xz7#
也许您可以将枚举声明为一个静态类,所有可能的值都是静态整型