隐藏错误,无需解决方法

时间:2014-07-14 18:27:00

标签: c# winforms

在我的代码中:

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 }

1 个答案:

答案 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