码迷,mamicode.com
首页 > 其他好文 > 详细

一个满逗趣的现象

时间:2019-09-03 14:59:15      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:VID   false   结果   实践   stat   ret   msdn   www   其他   

以下这个关于 .Net Framework 内建实值类型实践 IComparable 界面的现象很有趣


?????? 以下这个关于 .Net Framework 内建实值类型实践? IComparable 界面的现象很有趣,在 MSDN 上有这么一段注解 :

技术图片

?????? 然后写个范例来测试这些内建的实质类型调用 IComparable.CompareTo 的行为:

       static void Main(string[] args)
        {

            System.Byte z1 = 9;
            System.Byte z2 = 2;
            Console.WriteLine(z1.CompareTo(z2));


            System.Int16 m1 = 9;
            System.Int16 m2 = 2;
            Console.WriteLine(m1.CompareTo(m2));

            System.UInt16 n1 = 9;
            System.UInt16 n2 = 2;
            Console.WriteLine(n1.CompareTo(n2));


            System.Int32 x1 = 9;
            System.Int32 x2 = 2;
            Console.WriteLine(x1.CompareTo(x2));


            System.UInt32 y1 = 9;
            System.UInt32 y2 = 2;
            Console.WriteLine(y1.CompareTo(y2));


            System.Int64 p1 = 9;
            System.Int64 p2 = 2;
            Console.WriteLine(p1.CompareTo(p2));


            System.UInt64 q1 = 9;
            System.UInt64 q2 = 2;
            Console.WriteLine(q1.CompareTo(q2));


            System.Single i1 = 9;
            System.Single i2 = 2;
            Console.WriteLine(i1.CompareTo(i2));

            System.Double j1 = 9;
            System.Double j2 = 2;
            Console.WriteLine(j1.CompareTo(j2));

            System.Decimal d1 = 9;
            System.Decimal d2 = 2;
            Console.WriteLine(d1.CompareTo(d2));

            Console.ReadLine();
        }

?????? 这个结果超逗趣的,在类型为 Byte, Int16 与 UInt16 时,结果是两值相减,以上面的范例看起来就是 7 ( 内部实践的确是两值相减);而其他的类型答案则是 1 (这些类型的实践就是大于时回传 1,相等回传 0,小于则回传? -1)。

?????? 这告诉我们在用 IComparable.CompareTo 的时候,只要判断大于零、等于零与小于零,千万不要判断什么等于 1 或 -1 之类的。 David 老师 也提供了一个颇逗趣的程序,如下:

        static void Main(string[] args)
        {
            Int32 x1 = 3, x2 = 1;

            Console.WriteLine((x1.CompareTo(x2) == ((UInt32)x1).CompareTo((UInt32)x2)).ToString());
            Console.WriteLine((x1.CompareTo(x2) == ((UInt16)x1).CompareTo((UInt16)x2)).ToString());

            Int32 y1 = 2, y2 = 1;
            Console.WriteLine((y1.CompareTo(y2) == ((UInt32)y1).CompareTo((UInt32)y2)).ToString());
            Console.WriteLine((y1.CompareTo(y2) == ((UInt16)y1).CompareTo((UInt16)y2)).ToString());

            Console.ReadLine();
        }

?????? 答案是 True、False、True、True。说实话,这个题目拿出来考还真的满整人的,然后 MSDN 文档的注解还真是让你没话可说。


原文:大专栏  一个满逗趣的现象


一个满逗趣的现象

标签:VID   false   结果   实践   stat   ret   msdn   www   其他   

原文地址:https://www.cnblogs.com/petewell/p/11452929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!