zoukankan      html  css  js  c++  java
  • C#--比较

    类型比较:

    在比较对象时,常常需要知道它们的类型,这样才能确定是否可以进行值的比较.

    方法一.

    可以将GetType()方法和typeof()运算符一起使用,就可以确定对象的类型.

    例子:

        int i = 10;
        if (i.GetType() == typeof(Int32))
        {
             Response.Write("Type Of Int32");
        }
     

    方法二:

    is运算符.

    is运算符并不是说明对象是某种类型的一种方式,而是检查对象是否是给定的类型,或者是否可以转换为给定的类型,如果是,返回true.

    语法:

    <operand> is <type>

    结果如下:

    type operand result
    类类型 也是类类型,或者继承了该类,或者封箱到该类 true
    接口类型 也是该接口类型,或者实现了该接口 true
    值类型 也是值类型,或者拆箱到该类型 true

    例子:

    public struct Ms
    {
    
    }
        protected void Page_Load(object sender, EventArgs e)
        {
            Ms m = new Ms();
            if (m is Ms)
            {
                Response.Write("Type Of Ms<br/>");
            }
            object o = m;
            if (o is Ms)
            {
                Response.Write("Type Of Ms<br/>");
            }
        }
    结果:

    image

    值比较:

     考虑比较两个Person对象时,每个对象都有一个Age属性,比较两个人,看谁的年龄大.代码如下:

    if(person1.Age>person2.Age){  }

    也可以使用运算符重载.

    if(person1>person2){  }

    才外,比较两个对象时,还可以比较体重,身高等属性.

    还有一个办法是使用IComparable和IComparer接口.它们可以用标准的方式定义比较两个对象的过程.

     这两个接口的区别:

    IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象.

    IComparer在一个单独的类中实现,可以任意比较两个对象.

    一般来说,我们使用IComparable给出类的默认比较代码,使用其他类给出非默认的比较代码.

    IComparable:

        // 摘要:
        //     定义通用的比较方法,由值类型或类实现以创建类型特定的比较方法。
        [ComVisible(true)]
        public interface IComparable
        {
            // 摘要:
            //     比较当前实例与同一类型的另一对象。
            //
            // 参数:
            //   obj:
            //     与此实例进行比较的对象。
            //
            // 返回结果:
            //     一个 32 位有符号整数,指示要比较的对象的相对顺序。返回值的含义如下: 值 含义 小于零 此实例小于 obj。零 此实例等于 obj。
            //     大于零 此实例大于 obj。
            //
            // 异常:
            //   System.ArgumentException:
            //     obj 不具有与此实例相同的类型。
            int CompareTo(object obj);
        }
    例子:
    public class Person : IComparable
    {
        public int Age;
    
        public string Name;
    
        public Person(int age,string name)
        {
            this.Name = name;
            this.Age = age;
        }
    
        public int CompareTo(object obj)
        {
            Person p = obj as Person;
            return p.Age - this.Age;
        }
    }

     IComparer:

        // 摘要:
        //     公开一种比较两个对象的方法。
        [ComVisible(true)]
        public interface IComparer
        {
            // 摘要:
            //     比较两个对象并返回一个值,指示一个对象是小于、等于还是大于另一个对象。
            //
            // 参数:
            //   x:
            //     要比较的第一个对象。
            //
            //   y:
            //     要比较的第二个对象。
            //
            // 返回结果:
            //     值 条件 小于零 x 小于 y。 零 x 等于 y。 大于零 x 大于 y。
            //
            // 异常:
            //   System.ArgumentException:
            //     x 和 y 都不实现 System.IComparable 接口。- 或 - x 和 y 的类型不同,它们都无法处理与另一个进行的比较。
            int Compare(object x, object y);
        }

    例子:

    public class Person
    {
        public int Age;
    
        public string Name;
    
        public Person(int age,string name)
        {
            this.Name = name;
            this.Age = age;
        }
    }
    
    public class PersonCompare : IComparer
    {
        public int Compare(object x, object y)
        {
            Person p1 = x as Person;
            Person p2 = y as Person;
            return p1.Age - p2.Age;
        }
    }
     
        protected void Page_Load(object sender, EventArgs e)
        {
            Person p1 = new Person(10, "张三");
            Person p2 = new Person(20, "李四");
            PersonCompare pc = new PersonCompare();
    
            int result = pc.Compare(p1, p2);
            Response.Write("p1:" + p1.Name + "--" + p1.Age + "<br/>");
            Response.Write("p2:" + p2.Name + "--" + p2.Age + "<br/>");
    
            if (result>0)
            {
                Response.Write(p1.Name + "的年龄>" + p2.Name);
            }
            else
                if (result==0)
                {
                    Response.Write(p1.Name + "的年龄=" + p2.Name);
                }
                else
                {
                    Response.Write(p1.Name + "的年龄<" + p2.Name);
                }
        }
  • 相关阅读:
    移动硬盘文件被恶意隐藏
    asp.net identity UserSecurityStamp 的作用
    Head First Python学习笔记1
    WPF 确认动态加载数据完成
    rust by example 2
    Rust by Example1
    奇葩!把类型转成object
    Lambda高手之路第一部分
    理解Lambda表达式
    贪心算法-找零钱(C#实现)
  • 原文地址:https://www.cnblogs.com/loveYN/p/4509696.html
Copyright © 2011-2022 走看看