【问题标题】:'System.FormatException' occurred in mscorlib.dll but was not handled in user code“System.FormatException”发生在 mscorlib.dll 中,但未在用户代码中处理
【发布时间】:2017-01-06 03:03:21
【问题描述】:

当我添加第一行时代码运行良好,但之后它抛出了我

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

我已经盯着这段代码看了很长一段时间,但似乎无法确定可能导致这种情况的问题是什么。

protected void OnAddEmployee(object sender, EventArgs e)
    {
        if (gridViewPersonal.SelectedDataKey == null)
        {
            return;
        }

        int employeeID = 0;
        foreach (GridViewRow row in gridViewEmployee.Rows)
        {
            if (employeeID < int.Parse(row.Cells[0].ToString()))
            {
                employeeID = int.Parse(row.Cells[0].ToString());
            }
        }
        employeeID++;



                cmd.ExecuteNonQuery();
                con.Close();
            }
        }

【问题讨论】:

  • 希望在这一行中抛出异常:int.Parse(row.Cells[0].ToString() 请使用TryParse 代替parse
  • 我尝试了 TryParse 并抛出了同样的异常
  • @un-lucky 抱歉....
  • 酷很高兴为您提供帮助

标签: c# parsing


【解决方案1】:

正如我在评论中提到的,问题在于转换,请查看foreach,您会得到row.Cells[0].ToString() 的值,有时是nullempty 或其他一些不能转换为有效整数的值,这次你将得到FormatException,就像你现在得到的一样。还有一件事你做错了,你两次解析相同的值,为了避免这两个错误,你可以使用TryParse,在这种情况下你的代码将是这样的:

int employeeID = 0;
foreach (GridViewRow row in gridViewEmployee.Rows)
{
    if (int.TryParse(row.Cells[0].ToString(), out employeeID))
    {
       break;
    }
}

请注意:我只是试图在该循环中为您提供int.TryParse 的示例用法,我没有得到您在此处尝试使用循环的确切过程,在上面例如 if 将在第一次有效转换执行时中断循环。如果要遍历所有行,可以删除中断。

【讨论】:

    【解决方案2】:

    当 int.parse 遇到非数字字符时会发生该错误。您可以使用 try catch 块来捕获错误并移动到下一行,或者您可以使用 int.tryparse 在不使用 try catch 的情况下检查它。这是带有 tryparse 的代码:

    int employeeID = 0;
    foreach (GridViewRow row in gridViewEmployee.Rows)
    {
        string curStr = row.Cells[0].ToString();
        int curID = 0;
        if (int.TryParse(curStr, curID)){
            if (employeeID < curID)
            {
                employeeID = curID);
            }
        }
    }
    employeeID++;
    

    您可能还应该使用调试器单步执行并在解析单元格值之前将其观察为字符串,这就是为什么我为它创建了一个单独的变量。当我终于意识到我一直在从错误的列中提取数据时,我对自己的打击最大(象征性地)。

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多