这两个陈述有什么区别?

时间:2013-02-05 07:54:56

标签: c# if-statement conditional-operator

  

可能重复:
  C# ?: Conditional Operator


声明:

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 值,而是存储0AskingPriceFrom是一个get-set字段,存储 decimal 值。我试图在问号后只转换dr["AskingPriceFrom"],但声明给了我一个错误。

有没有办法保护 null 值不会转换为十进制

5 个答案:

答案 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;
相关问题