类型转换和'as'转换之间的区别

时间:2012-12-10 17:05:42

标签: c# casting type-conversion

  

可能重复:
  Casting vs using the ‘as’ keyword in the CLR

我知道关于演员阵容有很多问题,但我不知道这两个演员阵容的具体名称,所以我不知道在哪里看。下面两个演员之间有什么区别?

TreeNode treeNode = (TreeNode)sender; // first cast
TreeNode treeNode = (sender as TreeNode); //second cast

2 个答案:

答案 0 :(得分:11)

第一种类型的强制转换称为“显式强制转换”,第二种强制转换实际上是使用as运算符的转换,与运算符略有不同。

如果对象不是指定类型,显式转换(type)objectInstance将抛出InvalidCastException

// throws an exception if myObject is not of type MyTypeObject.
MyTypedObject mto = (MyTypedObject)myObject;

如果对象不是指定类型,as运算符将不会抛出异常。它只会返回null。如果对象具有指定的类型,则as运算符将返回对转换类型的引用。使用as运算符的典型模式是:

// no exception thrown if myObject is not MyTypedObject
MyTypedObject mto = myObject as MyTypedObject; 
if (mto != null)
{
    // myObject was of type MyTypedObject, mto is a reference to the converted myObject
}
else
{
    // myObject was of not type MyTypedObject, mto is null
}

有关显式转换和类型转换的更多详细信息,请查看以下MSDN参考:

答案 1 :(得分:7)

如果sender不是TreeNode而不是第一个抛出异常而第二个返回null