声明:
if(dr["AskingPriceFrom"]!=System.DBNull.Value)
objFilters.AskingPriceFrom=Convert.ToDecimal(dr["AskingPriceFrom"]);
else
objFilters.AskingPriceFrom=null;
声明第二:
objFilters.AskingPriceFrom=Convert.ToDecimal(
dr["AskingPriceFrom"]!=System.DBNull.Value ? dr["AskingPriceFrom"] : null
);
这两个陈述有什么区别?
在第一个语句中,如果 if-else 条件中的值为空,则它正确存储 null 值;但是,如果第二个条件中的值为空,则不存储 null 值,而是存储0
。 AskingPriceFrom
是一个get-set字段,存储 decimal 值。我试图在问号后只转换dr["AskingPriceFrom"]
,但声明给了我一个错误。
有没有办法保护 null 值不会转换为十进制?
答案 0 :(得分:2)
显然是Convert.ToDecimal(null) == 0
//编辑:这应该有效
objFilters.AskingPriceFrom =
(dr["AskingPriceFrom"] != System.DBNull.Value) ?
Convert.ToDecimal(dr["AskingPriceFrom"]) : null;
答案 1 :(得分:1)
这是因为Decimal不可为空。你应该转换为decimal?
,这样当你将null转换为该类型时,它将不会返回默认值0,而是返回null。
答案 2 :(得分:0)
(三元) 如果 null ,您将获得:
objFilters.AskingPriceFrom = Convert.ToDecimal(null);
这可能会导致错误。
答案 3 :(得分:0)
您应该在此处阅读Convert.ToDecimal
文档http://msdn.microsoft.com/en-us/library/e6440ed8.aspx。
Convert.ToDecimal
返回decimal
或抛出异常,但在您的情况下,您需要返回类型为Nullable<decimal>
。
您可以使用以下代码:
decimal? result;
if (Convert.IsDBNull(dr["AskingPriceFrom"]))
{
result= null;
}
else
{
result = dr.GetDecimal(reader.GetOrdinal("AskingPriceFrom"));
}
答案 4 :(得分:0)
非常感谢https://stackoverflow.com/users/1336654/jeppe-stig-nielsen。这工作正常。
objFilters.AskingPriceFrom = dr["AskingPriceFrom"] != System.DBNull.Value ? Convert.ToDecimal(dr["AskingPriceFrom"]) : (decimal?)null;