在有些时候我们会使用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;