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

pha*_*unk 2 c# casting type-conversion

可能重复:
使用CLR中的'as'关键字进行转换

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

TreeNode treeNode = (TreeNode)sender; // first cast
TreeNode treeNode = (sender as TreeNode); //second cast
Run Code Online (Sandbox Code Playgroud)

Ian*_*ien 12

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

如果对象不是指定类型(type)objectInstance,InvalidCastException则显式强制转换将抛出一个.

// throws an exception if myObject is not of type MyTypeObject.
MyTypedObject mto = (MyTypedObject)myObject;
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

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


L.B*_*L.B 7

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