【问题标题】:How to handle exception C#?如何处理异常 C#?
【发布时间】:2020-01-29 20:36:49
【问题描述】:

我正在尝试将字符串转换为 NULL,以便 MySQL 可以处理它。但是,我得到“无法将字符串转换为双精度”。 我想抛出一个异常,这样我就可以处理输入的任何字符串,可以这样做吗??

try
{
    Double dDate = Convert.ToDouble(cellData);
    DateTime dt = DateTime.FromOADate(dDate);
    cellString = dt.ToString("yyyy-MM-dd");
    if (cellString.Length == 0)
        cellString = "NULL";
    else
        cellString = "'" + MySqlHelper.EscapeString(cellString) +         "'";

   // throw new EncoderFallbackException("Testing 123");
}
catch (InvalidCastException)
{
    cellString = "NULL";
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,       MessageBoxIcon.Error);
    oWorkbook.Close();
    m_iSystemOk = false;
    return bResult;
}

在 OP 评论后更新答案

cellData 是这样定义的:

var cellData = oWorksheet.Cells[row, col].Value2;
string cellString = "";

if (cellData != null)
{
    if (col == 6 || col == 9 || col == 10)
    {
        try (code continues as above statement)

【问题讨论】:

  • cellDataRange 对象,但您将其视为 string

标签: string exception null double


【解决方案1】:

由于cellData 中的任何内容都没有成功转换为double,因此该行可能会导致您遇到问题:

Double dDate = Convert.ToDouble(cellData);

不要使用Convert.ToDouble,而是尝试使用double.TryParse

if (double.TryParse(cellData, out double dDate))
{
    ... The rest of your code
}
else
{
    // cellData is NOT a double. Do something here to handle it
}

之所以改变这个是因为TryParse返回一个布尔值,表示它是否成功而不是抛出异常

这为您提供了一种处理转换失败的优雅方式。

【讨论】:

  • 这给了我以下错误:'double.tryparse(string, out double)' 的最佳重载方法匹配有一些无效的参数
  • InvalidCastException 是我要处理的正确异常吗?
  • 什么是cellData?这会让我觉得它不是字符串
  • 它是一个变量:var cellData = oWorksheet.Cells[row, col].Value2;字符串 cellString = ""; if (cellData != null) { if (col == 6 || col == 9 || col == 10) { 试试
  • 尝试成为开题的第一个尝试
【解决方案2】:

我有错误的例外。更改为 catch (FormatException) 及其工作

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2012-06-11
    • 2011-04-27
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多