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/>");
}
}
结果:
值比较:
考虑比较两个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);
}
}
随机推荐
- jQuery get/post区别及contentType取值
1.GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化浏览器是直接拿出了第一次访问的结果,表 ...
- phpcms V9 联动菜单的调用
/*********************************** 通过id获取显示联动菜单的 顶级父类的名称* @param $linkageid 联动菜单id* @param $keyi ...
- Windows 7 Apache下计算机无法访问局域网网站的问题
在Windows 7系统下,由于安全限制问题,本机搭建的网站,局域网内其它计算机是无法访问的. 要解决这个问题,只需要在防火墙加入自建规则便可以了,具体步骤如下: 控制面板=>Windows防火 ...
- GetMenu返回0解决方法
在CMainFrame类中找到CMFCMenuBar m_wndMenuBar;这个成员变量,将跟它相关的代码注释掉的话,然后运行,OK.
- [kuangbin带你飞]专题十 匹配问题 二分图最大权匹配
二分图最大权匹配有km算法和网络流算法 km算法模板默认解决最大权匹配的问题 而使用最小费用最大流 是解决最小权匹配问题 这两种办法都可以求最大最小权 需要两次取反 TAT 感觉讲km会很难的样子.. ...
- python实现发工资脚本
好开心啊,在旁边大神的帮助下,终于实现了发工资的python脚本,之前用shell写的老出错,刚才测试,发80个人工资详情,妥妥的,代码如下: from email.mime.multipart im ...
- cf C. Mittens
http://codeforces.com/contest/370/problem/C 题意:有n个人,m中颜色的手套,开始每个人都是两只相同颜色的手套,经过交换最多可以换出多少个人戴不同颜色的手套. ...
- COJ 0026 汉诺塔问题
汉诺塔问题 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK ...
- jsp中pageEncoding、charset=UTF -8
jsp中pageEncoding.charset=UTF -8" 在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8". ...
- POJ3294--Life Forms 后缀数组+二分答案 大于k个字符串的最长公共子串
Life Forms Time Limit: 500 ...