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);
            }
    }
posted @ 2015-05-17 14:43  海绵宝  阅读(194)  评论(0编辑  收藏  举报