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.这可能会导致错误.
不需要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而是使用.