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