我知道关于演员阵容有很多问题,但我不知道这两个演员阵容的具体名称,所以我不知道在哪里看。下面两个演员之间有什么区别?
TreeNode treeNode = (TreeNode)sender; // first cast
TreeNode treeNode = (sender as TreeNode); //second cast
答案 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
。