什么是“ mscorlib.dll中发生'System.FormatException',但未在用户代码中处理”?

时间:2018-07-24 20:27:39

标签: c# .net linq

我想创建一个三层体系结构的Web应用程序。但发现一些问题,例如:

  

mscorlib.dll中发生了'System.FormatException'类型的异常   但未在用户代码中处理

我尝试了int.Parse()方法,即使该方法不起作用。

如何在ASP.NET 3Layer Web应用程序中处理此问题?

protected void btnDetails_Click(object sender, EventArgs e)
    {
        int id = int.Parse(txtId.Text);
        Product product = db.GetProducts().Single(x => x.productId == id);
        txtNmae.Text = product.name;
        txtPrice.Text = product.price.ToString();
    }

1 个答案:

答案 0 :(得分:1)

您应该使用int.TryPrase()而不是int.Prase()

如果输入字符串不是有效的整数,

int.Parse()将引发异常,而int.TryPrase()将根据转换是否有效返回true/false

int.Parse()

这引发异常。

string text = "abc";
int id = int.Parse(text);

但是

int.TryPrase()

这将返回false

string text = "abc";
bool result = int.TryParse(text, out int value);

编辑

程序引发异常的原因是TextBox中的文本不是整数值。如果int.Parse()方法是有效的整数值,它将把字符串值转换为int。因此,如果TextBox包含某些字符,例如ab等,或者即使它是一个空字符串,那么Parse()方法也无法将其转换为一个整数,因此抛出异常,抱怨您的输入字符串格式不正确。

int.TryParse()方法更进一步。它尝试将值转换为整数,如果成功,则返回true,并在out参数中以int格式提供转换后的值。如果由于输入字符串格式错误等问题而导致转换失败,则不会引发异常。相反,它将返回false,并且out参数将设置为zero。这样的好处是,在输入格式错误的情况下,不必捕获异常。

正如Bradley所指出的,如果您使用int.TryParse(),则应始终检查返回值。如果是true,则说明转换成功。如果是false,则说明出了点问题。因此,如果是false,在继续执行程序的下一步之前,您应该对输入字符串不是有效整数进行一些处理。