“object as type”和“((type)object)”之间有什么区别?

时间:2011-09-12 18:53:59

标签: c# object types casting strong-typing

  

可能重复:
  Direct casting vs 'as' operator?
  Casting vs using the 'as' keyword in the CLR

object myObject = "Hello world.";
var myString = myObject as string;

object myObject = "Hello world.";
var myString = (string)myObject;

我已经看到了两种方式都进行了类型转换。有什么区别?

3 个答案:

答案 0 :(得分:6)

“as”会在结果失败时将结果设置为null

显式强制转换会在失败时抛出异常。

答案 1 :(得分:3)

var myString = myObject as string;

它仅检查myobject的运行时类型。如果是string,则只会转换为string,否则只返回null

var myString = (string)myObject;

查找从源类型转换为字符串的implicit。如果运行时类型都不是string,也没有implicit转换,那么它会抛出异常。

阅读第3项:比较来自Bill Wagner的有效C#中的isas运算符

答案 2 :(得分:1)

如果无法将对象强制转换为目标类型,则强制转换将抛出异常。 as只会返回null