将DateTime属性设置为null

时间:2015-11-18 14:22:31

标签: c#

所以我有这个属性,并且想要将值设置为从db返回的值,或者如果它为空则设置为null。可以使用if-else执行此操作,但是为了更清晰的代码,我想使用三元运算符。有人能指出我犯的错误。感谢!!!

public DateTime? OptionExpiration {get;set;}
 //actually sets the value to null               
 if(String.IsNullOrEmpty(dr["OPTION_EXPIRATION"].ToString())){
      OptionExpiration = null;
}else{
      OptionExpiration = DateTime.Parse(dr["OPTION_EXPIRATION"].ToString());
}

//所以我检查字符串是空还是空,然后尝试设置值但收到此错误:错误2运算符' |'不能应用于''类型的操作数和' System.DateTime?'

String.IsNullOrEmpty(dr["OPTION_EXPIRATION"].ToString())
? OptionExpiration =  null
| OptionExpiration = DateTime.Parse(dr["OPTION_EXPIRATION"].ToString())
;

2 个答案:

答案 0 :(得分:6)

您使用的是三元运算符错误。

应该是:

OptionExpiration = String.IsNullOrEmpty(Convert.ToString(dr["OPTION_EXPIRATION"]))
                   ? (DateTime?)null
                   : DateTime.Parse(dr["OPTION_EXPIRATION"].ToString())
                   ;

所以:

assignment = condition ? trueExpression : falseExpression;

如果该字段是数据库中的date,则最好这样做:

OptionExpiration = Convert.IsDBNull(dr["OPTION_EXPIRATION"])
                   ? (DateTime?)null
                   : (DateTime)dr["OPTION_EXPIRATION"]
                   ;

答案 1 :(得分:0)

我会使用这样的扩展方法:

            public static Nullable<DateTime> AsNullableDateTime(this object item, Nullable<DateTime> defaultDateTime = null)
            {
                if (item == null || string.IsNullOrEmpty(item.ToString()))
                    return defaultDateTime;

                DateTime result;
                if (!DateTime.TryParse(item.ToString(), out result))
                    return defaultDateTime;

                return result;
            }

你可以将任何内容传递给它,它会尝试给你一个约会。如果它因任何原因失败(这也会检查以确保您发送的对象不为null),您将获得null返回;这很好,因为你要映射到可以为空的日期时间。

要使用此功能,您可以执行以下操作:

OptionExpiration = dr["OPTION_EXPIRATION"].AsNullableDateTime();

没有混乱,容易理解正在发生的事情,抽象出混乱,并且在解决方案的其他部分可以高度重复使用。