操做符is或as优于强制转换类型

在有些时候咱们会使用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;
相关文章
相关标签/搜索