在有些时候咱们会使用System.Object类型做为方法的参数,由于传入的参数类型可能不明确,在使用中又须要把这些参数转换为其它类型,那么就必需进行类型转换了,类型转换有两种方法,一种是使用as操做符,一种是使用C风格的强制转换,另外还有种比较安全的作法,即先使用is来作一个转换测试,而后再使用as或强制转换。
public static void transfer(object o)
{
//as操做符
MyType t = o as MyType;
t = (MyType)o;
if (t != null)
{
//t成功转换为MyType
}
else
{
//转换失败
}
//强制转换
try
{
MyType t;
t = (MyType)o;
if (t != null)
{
//t成功转换为MyType
}
else
{
//转换失败
}
}
catch { }
}
上面的例子中能够看出,使用as时代码更简单,并且不用try/catch语句。
as操做符不能用于值类型,as操做符在不能经过转换时将返回null,但由于值类型不能够为null,因此as不能用于值类型,值类型包括int, bool等
object o = Factory.GetObject();
int i = o as int;//不能经过编译
值类型不能使用as,那么就只好用强制类型转换了,但仍是能够精简一些,咱们能够使用is操做符来避免生成异常抛出,可是须要注意的是只有在不能使用as时才使用is,不然使用is将会带来代码的冗余。
Object o = Factory.GetValue();
int i = 0;
if(o is int) i = (int)o;
冗余代码的例子:
Object o = Factory.GetObject();
MyType t = null;
If(o is MyType) //使用as不会产生异常,因此不用使用is
t = o as MyType;
object o = Factory.GetObject();
MyType t = null;
If((o as MyType) != null)
t = o as MyType;