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);
}
}
随机推荐
- ECSTORE AJAX提交的实现
今天向大家介绍在ecstore中怎样使用ajax提交数据 1 <script> //JAVASCRIPT代码 $$(".BB").ADDEVENT('CHANGE',F ...
- Phpcms V9全站伪静态设置方法
为什么要伪静态?具体在这里就不说了,你懂的!一方面更新修改后不需要生成静态文件,另一方面为了SEO! 访问规则如下 1 2 list-{$catid}-{$page}.html content-{$c ...
- 1105PHP笔记001
关于抽象类:abstract class Car{ abstract function getMaximumSpeed();}class FastCar extends Car{ function g ...
- == 与 is
Python中的对象包含三要素:id.type.valueid:用来唯一标识一个对象: type:标识对象的类型: value是对象的值. ==是判断对象的值是否相等,也就是value,is是判断对象 ...
- 第几天 AC 杭电
第几天? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Statement执行DQL语句(查询操作)
import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import org.junit.T ...
- IMAGE_SECTION_HEADER
typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAdd ...
- Android监听事件
ListView事件监听: setOnItemSelectedListener 鼠标滚动时触发 setOnItemClickListener 点击时触发 EditText事件监听: setOnKeyL ...
- 使用minidwep-gtk-PJ-wifi教程中文版
- BZOJ3296: [USACO2011 Open] Learning Languages
3296: [USACO2011 Open] Learning Languages Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 81 Solved: ...