C# 无法使用DBNull.Value将对象从DBNull强制转换为其他类型?转换

C# 无法使用DBNull.Value将对象从DBNull强制转换为其他类型?转换,c#,dbnull,C#,Dbnull,我正在尝试从数据库中读取我现在正在寻找的条件中已知为空的值。 所以我有一种检查方法:ld.Percentage=reader[“DataWin3Data”]!=DBNull.Value?Convert.ToDouble(reader[“DataWin3Data”]):double.MinValue 我以前使用过它,其中一个字段可以为null,并且没有问题。我不完全确定在这种情况下该怎么做,以及如何修复它。我已将我的相关代码包括在下面。当存在空值时,如何更改我当前正在执行的操作以避免出现此错误 l

我正在尝试从数据库中读取我现在正在寻找的条件中已知为空的值。 所以我有一种检查方法:
ld.Percentage=reader[“DataWin3Data”]!=DBNull.Value?Convert.ToDouble(reader[“DataWin3Data”]):double.MinValue
我以前使用过它,其中一个字段可以为null,并且没有问题。我不完全确定在这种情况下该怎么做,以及如何修复它。我已将我的相关代码包括在下面。当存在空值时,如何更改我当前正在执行的操作以避免出现此错误

ld.Percentage = reader["DataWin3Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin3Data"]) : double.MinValue;
ld.TotalCases = reader["DataWin8Data"] != DBNull.Value ? Convert.ToInt32(reader["DataWin8Data"]) : int.MinValue;
ld.TotalPercentage = reader["DataWin7Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin7Data"]) : double.MinValue;
这个怎么样

ld.Percentage = reader["DataWin3Data"] == DBNull.Value 
                ? double.MinValue : (double)reader["DataWin3Data"];
像这样的代码我已经使用过很多次了。你确定你总是在读同样的字段,你也在检查null吗

另外,当您没有实际转换时,不要使用
Convert
。这应该是一个cast(如我的示例中所示)

如果这不起作用,可能是因为你对数据做了一些奇怪的事情。也许是途中的一些连载?试试这个:

ld.Percentage = reader["DataWin3Data"] is DBNull 
                ? double.MinValue : (double)reader["DataWin3Data"];

不如改成双倍的.TryParse
?也许更多的代码行,但更安全。@DonBoitnott可能不是一个坏主意,如果它是从reader中产生的,它会有关系吗?不应该。请看:谢谢,这非常有帮助,我将放弃使用convert,我已经发现并不是所有可以为null的字段都有抛出错误的检查。我还有一个问题,当有null时这似乎有效,但当字段被填充时,它会给我相同的错误。使用上面的命令没有办法做到这一点吗?@Kpt.Khaos您确定这是发生错误的那一行吗?检查列的名称。或者更确切地说,将其全部作为一种方法编写,这样您就不会依赖于无打字错误的代码:D