__try_cast

本主题仅适用于托管扩展的 1 版 C++ 的说明。 只应在此语法维护 1 版代码。 有关使用等效功能的信息在新语法,请参见 safe_cast

,如果转换失败,执行指定的转换或引发异常。

__try_cast < type-id > ( expression )

备注

__try_cast 关键字 (类似在行为与 dynamic_cast) 提供自动引发异常支持 (类型 系统:: InvalidCastException),只要指定的强制转换操作失败。

在 __try_cast 关键字,即可自动警告应用程序的测试阶段,对可能的强制转换失败。

当移植 C++ 的托管扩展中,替换时 __try_cast 调用与 safe_cast

,因为类型检查在运行时,不可能的__try_cast 在指针转换不工作的值类型 (__value)。

示例

在下面的示例中,尝试将指针 ( Derived 类型) 到另一个指针 ( MoreDerived 类型) 做出。 如果转换失败,它捕获,并报告的 catch 块:

// keyword__try_cast.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;

__gc struct Base {}; 
__gc struct Derived : Base {};
__gc struct MoreDerived : Derived {};

int main() {
   Base*bp = new Derived;
   try {
       MoreDerived* mdp = __try_cast<MoreDerived*>(bp);
   }
   catch(System::InvalidCastException*) {
       Console::WriteLine("Could not cast 'bp' to MoreDerived*");
   }
}

Output

Could not cast 'bp' to MoreDerived*