博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#--比较
阅读量:5276 次
发布时间:2019-06-14

本文共 3450 字,大约阅读时间需要 11 分钟。

类型比较:

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

方法一.

可以将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
"); } object o = m; if (o is Ms) { Response.Write("Type Of Ms
"); } }
结果:

值比较:

 考虑比较两个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 + "
"); Response.Write("p2:" + p2.Name + "--" + p2.Age + "
"); 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); } }

转载于:https://www.cnblogs.com/loveYN/p/4509696.html

你可能感兴趣的文章
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>