关于enum的一个问题 enum et{a=4,b=4,c=4};et e = (et)4;e.tostring()返回什么值?为什么,虚心求教各位达人! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 貌似enum的强转是按照二分搜索法来定位的,即从中间首先开始找符合条件的。 你为什么不运行一下呢?:)一个建议,尽量少用枚举变量的 ToString方法,因为你最终发布的时候可能要混淆代码,混淆后枚举变量就改变了,ToString就不是你预期的内容了。 谢谢回答,这个是我运行过的,但是怎么也找不到原因,所以才问的,其实那个句子是这样的enum et{a=4,b=4,c=4,d=4,e=4};et e_1 = et.a;et e_2 =(et)4;结果e_1的结果是c,e_2的结果也是c,就是不知道为什么?好像是只要赋值相同,et的内容都是一样了,就像2楼说的,像是2分搜索。 et e_1 = et.a;//e_1 = et.aet e_2 = (et)4;//e_2 = et.aMessageBox.Show(e_1.ToString() + "\r\n" + e_2.ToString() + "\r\n" + (e_1 == e_2).ToString());可能ToString()方法的确是如1楼所说的,在ToString之前,e_1,e_2都是et.a。 我从表面看起来确实是这个规律如果enum的枚举值是偶数个n,并且赋相同的常数值,那么返回的都是n/2位置的那个数;如果是奇数个,都返回中间那个数。现在只能说1楼是对的,不知道还有没有其他的解释。 应该是二分搜索法。你可以尝试改变里面相同的值的分布。如: enum et{a=4,b=1,c=2,d=4,e=4};et e = (et)4;现在定位在d上enum et{a=4,b=1,c=2,d=3,e=4};et e = (et)4;现在定位在a上 正如1楼所说,Enum里使用了二分搜索来查找枚举项的值。private static int BinarySearch(ulong[] array, ulong value){ int num = 0; int num2 = array.Length - 1; while (num <= num2) { int index = (num + num2) >> 1; ulong num4 = array[index]; if (value == num4) { return index; } if (num4 < value) { num = index + 1; } else { num2 = index - 1; } } return ~num;} .Net GridView 如何在服务端设置选中某一行 c# 十进制数如何转化为BCD码 TreeView 双击 checkbox 只触发一次After_Check事件 C#取得个位数 删除表中所有记录,要怎样最简单? 如何将datatable里的两列的数据导入到另一个datatable的指定两列 实在找不到了(asp.net揭密中文版) 代码格式化规范后两个TABLE就出现了间隙!怎么回事? 怎么把嵌套的richtextbox里的内容保存为RTF文件? 套接字如何显示收发中文? 关于按钮的状态问题 如何制作模板控件?
一个建议,尽量少用枚举变量的 ToString方法,因为你最终发布的时候可能要混淆代码,混淆后枚举变量就改变了,ToString就不是你预期的内容了。
et e_1 = et.a;//e_1 = et.a
et e_2 = (et)4;//e_2 = et.a
MessageBox.Show(e_1.ToString() + "\r\n" + e_2.ToString() + "\r\n" + (e_1 == e_2).ToString());
可能ToString()方法的确是如1楼所说的,在ToString之前,e_1,e_2都是et.a。
如果是奇数个,都返回中间那个数。现在只能说1楼是对的,不知道还有没有其他的解释。
如: enum et{a=4,b=1,c=2,d=4,e=4};
et e = (et)4;现在定位在d上
enum et{a=4,b=1,c=2,d=3,e=4};
et e = (et)4;现在定位在a上
{
int num = 0;
int num2 = array.Length - 1;
while (num <= num2)
{
int index = (num + num2) >> 1;
ulong num4 = array[index];
if (value == num4)
{
return index;
}
if (num4 < value)
{
num = index + 1;
}
else
{
num2 = index - 1;
}
}
return ~num;
}