cbXSizeBox->Text);-6ren">
gpt4 book ai didi

c++ - 简单的 "catching"逻辑

转载 作者:行者123 更新时间:2023-11-30 01:21:58 25 4
gpt4 key购买 nike

我有一个字符串^,在下面的代码中被转换为 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);
}

这很好用。(仅供引用 capBoxSize->x 是另一个可以评估为 uint32 的值)。

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

如果 catch block 没有捕获格式异常,我想添加代码以将 capBoxSize->x 的值更改为新的有效值。我试图找到对编译器说的东西,“如果你捕获到这个异常,就这样做。但如果你没有捕获到异常,就这样做。”是否可以将 catch block 包装在 if else 语句中?

如果您了解我正在尝试做的事情,我们将不胜感激。

附言我认为将更改 capBoxSize->x 的代码放在 try block 中并不是一个真正的选择。因为这可能会尝试将 newX 分配为类似“2ty”的东西给 capBoxSize->X,这是一个 Uint32。这可能会导致错误。

最佳答案

不需要 else block ,只需将格式放在实际解析之后:

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);

Putting the code to change capBoxSize->x in the try block isn't really an option I think. As this could attempt assigning newX as something like "2ty" to capBoxSize->X, which is a Uint32.

这永远不会发生,因为此时您的代码已经抛出异常并因此离开 try block 并进入 catch block 。


也就是说,我会避免使用 try...catch 并使用 System::Int32::TryParse 代替。

关于c++ - 简单的 "catching"逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com