您的位置:首页 > 其它

用is和as检查和转换兼容类型

2008-09-01 23:02 281 查看
以前,需要检查一个实例的类型时,我都使用强制转换操作。还在刚Pascal转到C++的时候,是这样写的,感觉有代码有点笨拙。

(C#代码)

bool CheckIsType(object source)

{

try

{

TagClass result = (TagClass)source;

return true;

}

catch

{

return false;

}

}

后来发现了object.GetType(),但是很难去判断实例的类型是否兼容。现在我向大家推荐is和as运算符.

is 检查对象是否与给定类型兼容。

as 运算符用于在兼容的引用类型之间执行转换。

为什么推荐给各位:

as 运算符类似于强制转换操作。如果无法进行转换, as 返回 null ,而强制转换会引发异常。

有些情况下我们也只是想判断类型,没有必要去做转换,那么我们就可以用is了。

以下是as的例子(代码引用自MSDN):

using System;

class Class1

{

}

class Class2

{

}

class MainClass

{

static void Main()

{

object[] objArray = new object[6];

objArray[0] = new Class1();

objArray[1] = new Class2();

objArray[2] = "hello";

objArray[3] = 123;

objArray[4] = 123.4;

objArray[5] = null;

for (int i = 0; i < objArray.Length; ++i)

{

string s = objArray[i] as string;

Console.Write("{0}:", i);

if (s != null)

{

Console.WriteLine("'" + s + "'");

}

else

{

Console.WriteLine("not a string");

}

}

}

}

以下是is的例子(代码引用自MSDN):

using System;

class Class1

{

}

class Class2

{

}

class IsTest

{

static void Test(object o)

{

Class1 a;

Class2 b;

if (o is Class1)

{

Console.WriteLine("o is Class1");

a = (Class1)o;

// Do something with "a."

}

else if (o is Class2)

{

Console.WriteLine("o is Class2");

b = (Class2)o;

// Do something with "b."

}

else

{

Console.WriteLine("o is neither Class1 nor Class2.");

}

}

static void Main()

{

Class1 c1 = new Class1();

Class2 c2 = new Class2();

Test(c1);

Test(c2);

Test("a string");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: