System.FormatException 控制台应用程序 C# 中的输入字符串格式错误?

System.FormatException Input string was not in a correct format error in Console Application C#?

row[colname]="NULL" 和 "ABC" 的值时出现错误 有什么办法可以避免它!!
我什至尝试尝试解析,但我收到错误无法将对象转换为字符串 row[colname](注释代码)

'System.FormatException' 类型的未处理异常发生在 mscorlib.dll

foreach (DataRow row in csvData.Rows)
            {
                //var Result = double.TryParse(row[colname], out myDec);

                if (Convert.ToDouble(row[colname]) >= med1 && Convert.ToDouble(row[colname]) <= med2)
                {
                    al.Add(Convert.ToDouble(row[colname]));
                    //Console.WriteLine("value greater than 20 % median= {0}", Convert.ToDouble(row["Data Value"]));
                }

一个简单的问题:为什么注释行 var Result = double.TryParse(row[colname], out myDec);?这是做这件事的正确方法。您收到该异常只是因为 Convert.To() 无法转换 row[colname] 中的值,当 double.TryParse() 进入该角色时,您可以检查 return 值的转换状态和使用 out 变量中的 out 值;代码将是这样的:

foreach (DataRow row in csvData.Rows)
{
    double myDec;

    if (row[colname] != null && double.TryParse(row[colname].Tostring(), out myDec))
    {
        if (myDec >= med1 && myDec <= med2)
        {
            al.Add(myDec);                      
        }
    }
}

请注意:如果有机会在 row[colname]

中获得 DbNull,请包括 row[colname] !== DbNull.Value

出现问题是因为您试图将 "NULL" 和 "ABC" 转换为双精度类型,这是根本不可能的。试试这个:

double myDec;
foreach (DataRow row in csvData.Rows)
{
      double.TryParse(row[colname]?.ToString(), out myDec)
      if (myDec >= med1 && myDec <= med2)
      {
           al.Add(myDec);
      }

使用row[colname]?.ToString()row[colname] 从对象转换为字符串。 double.TryParse(String, Double) 要求第一个参数是字符串而不是对象。