简单的"捕捉"逻辑

Guy*_*ean 1 c++ exception-handling c++-cli try-catch

我有一个字符串^,它被转换为Uint32在下面的代码中:

try
{
    int newX = System::Convert::ToUInt32(this->cbXSizeBox->Text);
}
catch (FormatException^ e)
{
    printf("\nNot a valid 3-digit number");
    this->cbXSizeBox->Text = System::Convert::ToString(capBoxSize->x);
}
Run Code Online (Sandbox Code Playgroud)

这很好.(FYI capBoxSize-> x是另一个可以评估为uint32的值).

基本上捕获的是捕获cbXSizeBox-> Text(这是一个字符串)的值,回到它的默认值,如果用户输入除数字之外的任何内容(例如2g9).

如果catch块没有捕获格式异常,我想添加代码来将capBoxSize-> x的值更改为它的新有效值.我试图找到一些对编译器说的内容,"如果你抓住了这个异常,就这样做.但是如果你没有捕获异常,那就去做吧." 是否可以在if else语句中包含catch块?

如果您了解我正在尝试做什么,任何建议将不胜感激.

PS在try块中更改capBoxSize-> x的代码实际上并不是我认为的选项.因为这可能会尝试将newX分配给capBoxSize-> X这样的"2ty",这是一个Uint32.这可能会导致错误.

Kon*_*lph 5

不需要else块,只需在实际解析后放置格式:

try {
    int newX = System::Convert::ToUInt32(this->cbXSizeBox->Text);
    capBoxSize->x = newX;
}
catch (FormatException^ e) {
    printf("\nNot a valid 3-digit number");
    this->cbXSizeBox->Text = System::Convert::ToString(capBoxSize->x);
}
Run Code Online (Sandbox Code Playgroud)

实际上没有必要临时newX,只需直接分配:

capBoxSize->x = System::Convert::ToUInt32(this->cbXSizeBox->Text);
Run Code Online (Sandbox Code Playgroud)

在try块中更改capBoxSize-> x的代码实际上并不是我认为的选项.因为这可能会尝试将newX分配给capBoxSize-> X这样的"2ty",这是一个Uint32.

这种情况永远不会发生,因为此时您的代码已经抛出异常并因此离开了try块并进入了catch块.


也就是说,我会避免try…catch在这里使用System::Int32::TryParse而是使用.