类型比较:

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

方法一.

可以将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/>");
}
}
结果:

值比较:

考虑比较两个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);
}
}

随机推荐

  1. 关于常用却忘记的css,jQuery

    text-indent:35px;//首行缩进 line-height:12px;//行高,高度和外层高度一样就会居中 box-shadow:inset 0px 0px 2px #ccc; conte ...

  2. PHPCMS V9 如何启用伪静态

    最近在研究CMS时候,首先是使用DEDECMS,后来又转到了PHPCMS,感觉后者架构更加合理,而前者主要是模板众多,故使用者多一些,不过我都是需要自己写模板,那就无所谓了. 玩各种CMS我喜欢首先看 ...

  3. .NET MVC插件化开发(支持Script和css压缩)

    上一篇博文里面,没有支持Script和css的压缩功能以及script和css的路径问题也没有解决,所以重新发布一个版本,解决了这几个问题,并且优化了插件路由注册,现在可以很方便的实现热插拔web插件 ...

  4. NET MVC+EF6+Bootstrap

    开源:ASP.NET MVC+EF6+Bootstrap开发框架   前言 我在博客园潜水两三年了,在这里看过很多大神的文章,也学到了很多东西.可以说我是汲取着博客园的营养成长的. 想当年,我也是拿1 ...

  5. android 设置背景为空(透明)

    在给控件设置背景时像ps那样的背景透明 在3.0以下可以使用 imageView.setBackgroundResource(android.R.id.empty); 但是这个方法在3.0以上会出现 ...

  6. Android 获取imageview的图,在另一个imageview里显示。

    当我点击默认头像里的其中一个然后在点确定就在最上面的那个imageview里显示选择的头像.求大神. img1和img2都是ImageView,要把img1中的图片显示到img2中 前景(对应src属 ...

  7. Android中使用shape制作一个旋转的progressbar

    public class ZNtestResActivity extends Activity { @Override public void onCreate(Bundle savedInstanc ...

  8. Android中ListView异步加载数据

    1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...

  9. SPOJ3267--D-query (树状数组离线操作)

    题意查询区间 [l,r]内有多少个不同的数字 先把所有询问按 右端点进行排序,然后离线操作.如果该位置的数字 已经出现过那么把前一个位置-1,当前位置+1.扫一遍输出. #include <cs ...

  10. Contest - 第10届“新秀杯”ACM程序设计大赛网络预选赛 赛后信息(晋级名单)

    经过比赛结果以及综合评定,以下42名同学暂定出现.下为出现名单(打*为 友情参赛 或为 有重大作弊嫌疑的选手). 在即日24时之前,若有异议,仍可申诉,申诉邮箱:desgard_duan@foxmai ...