我有一个字符串^,它被转换为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);
}
这很好。(FYI capBoxSize-> x是另一个可以评估为uint32的值)。
基本上捕获的是捕捉cbXSizeBox-> Text(这是一个字符串)的值,回到它的默认值,如果用户输入除数字之外的任何内容(例如2g9)。
如果catch块没有捕获格式异常,我想添加代码以将capBoxSize-> x的值更改为它的新有效值。我试图找到对编译器说的内容,"如果你发现了这个异常,就这样做吧。但是如果你没有发现异常,那么就这样做。"是否可以在if else语句中包含catch块?
如果您了解我尝试做的事情,我们将不胜感激。
P.S。在try块中更改capBoxSize-> x的代码并不是我认为的选项。因为这可能会尝试将newX分配为" 2ty" to capBoxSize-> X,这是一个Uint32。这可能会导致错误。
答案 0 :(得分: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);
}
实际上不需要临时newX
,只需直接分配:
capBoxSize->x = System::Convert::ToUInt32(this->cbXSizeBox->Text);
在try块中更改capBoxSize-> x的代码并不是我认为的选项。因为这可能会尝试将newX分配为" 2ty" to capBoxSize-> X,这是一个Uint32。
这种情况永远不会发生,因为此时您的代码已经抛出异常并因此离开try
块并进入catch
块。
也就是说,我会避免使用try…catch
,而是使用System::Int32::TryParse
。
答案 1 :(得分:0)
我想的是:
bool exception_caught = false;
try {
int newX = System::Convert::ToUInt32(this->cbXSizeBox->Text);
} catch (FormatException ^e) {
// Format exception code.
exception_caught = true;
// Handle Exception stuff
}
if (!exception_caught) {
// Other stuff.
}