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
Run Code Online (Sandbox Code Playgroud)
在每个提到的案例中,我们将enum转换为int或int转换为enum.
这些转换(性能,还是其他)有什么不同吗?或者他们是完全一样的?
谢谢.
PS在当前的例子中我比较'魔术数'但在实际应用中我从DB的整数字段获取数据.
小智 14
这可以提供帮助。
var constant = 1;
if(constant == (int)MyEnum.Valid1){
......
}
Run Code Online (Sandbox Code Playgroud)
Mel*_*var 11
你使用哪个并不重要,它们的表现相同.如果没有整数值的枚举,.net会在运行时创建一个.没有例外.
但是,Xichen Li是正确的 - 为什么要将枚举与整数值进行比较?
当您从数据库中读取int时,我建议将int转换为代表枚举值.这将大大提高代码的可读性.
enum MyEnum
{
Invalid=0,
Value1=1,
Value1=2,
}
MyEnum dbValue = ReadEnumFromDB();
if(dbValue == MyEnum.Invalid)
{
...
}
Run Code Online (Sandbox Code Playgroud)
他们是完全一样的。使用“调试,Windows,反汇编(Ctrl-Alt-D)”显示生成的IL可为您提供:
MyEnum e1 = MyEnum.Value1;
00260834 mov dword ptr [ebp-3Ch],1
int i1 = 2;
0026083B mov dword ptr [ebp-40h],2
// Is there any difference how to compare enumEration values with integers?
if (e1 == (MyEnum) i1)
00260842 mov eax,dword ptr [ebp-3Ch]
00260845 cmp eax,dword ptr [ebp-40h]
00260848 sete al
0026084B movzx eax,al
0026084E mov dword ptr [ebp-44h],eax
00260851 cmp dword ptr [ebp-44h],0
00260855 je 00260858
; // 1st
00260857 nop
if ((int)e1 == i1)
00260858 mov eax,dword ptr [ebp-3Ch]
0026085B cmp eax,dword ptr [ebp-40h]
0026085E sete al
00260861 movzx eax,al
00260864 mov dword ptr [ebp-48h],eax
00260867 cmp dword ptr [ebp-48h],0
0026086B je 0026086E
; // 2nd
0026086D nop
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76810 次 |
最近记录: |