在我的代码中:
private void cbbMaoDeObra_TextChanged(object sender, EventArgs e)
{
try
{
int resultado = Convert.ToInt32(cbbMaoDeObra.SelectedValue);
if (resultado == 0)
{
btnConfirmar.Enabled = false;
}
else
{
ViewStateWorkLogger = ViewStateWorkLogger.AbleToConfirm;
}
MaoDeObra = resultado;
}
catch (Exception)
{
return;
}
}
我有一个try-catch来处理一些错误。我的动态程序在启动时会在cbbMaoDeObra中有一个string
类型的变量,当它启动时,这个字符串只是'字母'并且无法解析。的SelectedValue。这是因为在一些事件之后我初始化它并从de Database读取。然后,没有像我做的那样的解决方法,比如使用return或将字段留空,我该如何处理这些错误?
是否建议使用try { statement } catch { empty }
?
答案 0 :(得分:3)
通常,对于解析字符串值,更安全的选项是int.TryParse
。这不会引发异常,而是返回bool
表示成功或失败。
if(int.TryParse("123", out resultado))
{
//parsing successful
}
else
{
// invalid input
}
但由于SelectedValue
属于object类型,您可以使用Convert.ToIn32
并防范异常(使用try-catch),或将SelectedValue转换为字符串然后使用int.TryParse
。
string str = cbbMaoDeObra.SelectedValue as string;
if (str != null && int.TryParse(str, out resultado))
{
}
是否建议使用{statement} catch {empty}?
很少有空捕获有用的地方。见:Is there any valid reason to ever ignore a caught exception。
不要使用catch(Exception)
,首先捕获特定的异常,记录/处理它。见Best Practices for Exceptions