C# 已经判断了为空但是还是在读取的时候类型错误

if (table.Rows[i][18] == DBNull.Value)
                            {
                                projects.Proportion = 0;
                            }
                            else
                            {
                                if (table.Rows[i][18].ToString().Contains("E"))
                                {
                                    decimal data = 0.0M;
                                    data = Convert.ToDecimal(decimal.Parse(table.Rows[i][18].ToString(), System.Globalization.NumberStyles.Float));
                                    ah1 += Convert.ToDouble(data) * Convert.ToInt32(table.Rows[i][12].ToString());

                                }
                                else
                                {
                                    ah1 += Convert.ToDouble(table.Rows[i][18]) * Convert.ToInt32(table.Rows[i][12].ToString());
                                }
                                projects.Proportion = ah1;
                            }

在读取空值的时候,最后一个else语句总是报错,数值类型错误。

建议先打印出来。看是什么东西。并且打印出长度。防止空白看不到。
然后使用DOUBLE.TRYPARSE()。这东西就可以了。
这样既知道了原因。也解决了报错的问题

不为空,不包含字符"E",那也不代表它就是double数据啊

那你要看里面到底是什么啊,是不是两个空格?

建议直接使用 double.TryParse();