__try_cast

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

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

__try_cast < type-id > ( expression )

备注

__try_cast 关键字(行为上与 dynamic_cast 类似)支持在指定强制转换操作失败时自动引发异常(类型为 System::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*");
   }
}

输出

Could not cast 'bp' to MoreDerived*