类型比较:

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

方法一.

可以将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. YesFinder - 网页文件管理系统 V2.0

    2.0版增加了模态框并重写了右键菜单插件.界面改为全中文.使用方式更加灵活. 同时,文件及目录改名更方便,直接双击名称就可改名. 这是DEMO的效果图. 1.功能上的主要改进是可以双击改文件/目录名称 ...

  2. 【回忆1314】第一次用AngularJS

    1.创建指令的4种方式(ECMA) var appModule = angular.module('app', []); appModule.directive('hello', function() ...

  3. Canvas -画图 关键字

    颜色.样式和阴影 属性 描述 fillStyle 设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle 设置或返回用于笔触的颜色.渐变或模式 shadowColor 设置或返回用于阴影的颜 ...

  4. 你不知的IE的bug及其解决方案

    E令人咬牙切齿的bug不胜枚举,其中IE6更是臭名昭著,令人发指.这里总结出IE下最为严重的5个bug,及其应对方案. 1.IE6下无法显示png格式的透明信息 这个bug是众多网页设计师的噩梦,虽然 ...

  5. JavaScript获取Select下拉框Option的Value和Text值的方法

    Js获取select下拉列表框各个Option的Value值相对比较容易,不过获取Text值却有点麻烦,对于一个初学JavaScript的 新手来说,可能一时还无从下手,那么就请看下本文的方法,以一个 ...

  6. liunx运维面试题汇总二

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识 ...

  7. flask开发restful api系列(8)-再谈项目结构

    上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...

  8. C++实现Log()日志函数

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600649.html 需求:Log()函数,能够自动根据时间记录日志信息,要求不定参数类型和参数个数. 第一 ...

  9. MetaData元数据

    一.基础 定义:数据库.表.列相关信息的描述.    何时使用:想取得对数据库的信息时使用.    一]数据库元数据——通过DataBaseMetaData            DataBaseMe ...

  10. 开发者应当了解的WebKit知识

    开发者应当了解的WebKit知识 对一些开发者而言,WebKit就是一个黑盒子.丢进去HTML.CSS.JS等一连串的东西,而WebKit就能变魔术一般显示出一个很棒的网页出来.实际上,正我的同事Il ...