enum et{a=4,b=4,c=4};et e = (et)4;e.tostring()返回什么值?为什么,虚心求教各位达人!

解决方案 »

  1.   

    貌似enum的强转是按照二分搜索法来定位的,即从中间首先开始找符合条件的。
      

  2.   

    你为什么不运行一下呢?:)
    一个建议,尽量少用枚举变量的 ToString方法,因为你最终发布的时候可能要混淆代码,混淆后枚举变量就改变了,ToString就不是你预期的内容了。
      

  3.   

    谢谢回答,这个是我运行过的,但是怎么也找不到原因,所以才问的,其实那个句子是这样的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分搜索。
      

  4.   


    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。
      

  5.   

    我从表面看起来确实是这个规律如果enum的枚举值是偶数个n,并且赋相同的常数值,那么返回的都是n/2位置的那个数;
    如果是奇数个,都返回中间那个数。现在只能说1楼是对的,不知道还有没有其他的解释。
      

  6.   

    应该是二分搜索法。你可以尝试改变里面相同的值的分布。
    如: 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上
      

  7.   

    正如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;
    }