尝试捕获块未捕获格式异常

时间:2018-12-23 13:40:12

标签: c#

我正在尝试捕获格式异常,但是程序在try块上停止,并且从未到达捕获块,代码有什么问题 请帮帮我吗?

private void txtBags_TextChanged(object sender, EventArgs e) 
{
   if (txtBags.Text != "" && PackingBox.Text != "") 
   {
      try 
      {
         txtQty.Text = ((Convert.ToDecimal(txtBags.Text)) * 
         (Convert.ToDecimal(PackingBox.Text)) / 100).ToString();
      } 
      catch (FormatException eX) 
      {
         MessageBox.Show(eX.Message);
      }
   } 
   else 
   {
      txtQty.Text = "";
   }
}

我想捕获异常并将消息显示给用户? 请告诉我该怎么办?

1 个答案:

答案 0 :(得分:0)

为什么要完全处理异常?为什么不通过使用TryParse完全避免这种情况?:

if (!string.IsNullOrEmpy(txtBags.Text) && !string.IsNullOrEmpty(PackingBox.Text))
{
    if (!Decimal.TryParse(txtBags.Text, out var bags))
    {
        // handle parse failure
        return;
    }

    if (!Decimal.TryParse(PackingBox.Text, out var packingBox))
    {
        // handle parse failure
        return;
    }

    txtQty.Text = (bags * packingBox / 100).ToString();
}

如果您不是使用Roslyn构建的,或者正在使用旧版本的C#,则可能需要事先定义变量:

decimal bags;
if (!Decimal.TryParse(txtBags.Text, out bags))

然后与PackingBox相同。