C# 尝试将datetime变量值设置为空

C# 尝试将datetime变量值设置为空,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我试图将null的值赋给DateTime类型的变量 将模型类值中的属性作为 public DateTime? ClosedOn = null; 在控制器端读取时,我使用以下代码: member.ClosedOn = reader[6].ToString().Equals(DBNull.Value)|| reader[6].ToString().Equals("") ? null: Convert.ToDateTime(reader[6].ToString());. 但我得

我试图将
null
的值赋给DateTime类型的变量

将模型类值中的属性作为

public DateTime? ClosedOn = null;
在控制器端读取时,我使用以下代码:

member.ClosedOn = reader[6].ToString().Equals(DBNull.Value)|| reader[6].ToString().Equals("") ? null: Convert.ToDateTime(reader[6].ToString());.
但我得到了以下错误:

“无法确定条件表达式的类型,因为存在
null
和日期时间之间没有隐式转换


如果您有任何想法,我们将不胜感激。

消息告诉您,编译器无法仅从
null
确定类型,但您可以通过使用:
(DateTime?)null
将其转换为类型来帮助您:

member.ClosedOn = reader[6].ToString().Equals(DBNull.Value) || 
                  reader[6].ToString().Equals("") 
    ? (DateTime?) null
    : Convert.ToDateTime(reader[6].ToString());
member.ClosedOn = reader[6].ToString().Equals(DBNull.Value) || 
                  reader[6].ToString().Equals("") 
    ? default(DateTime?)
    : Convert.ToDateTime(reader[6].ToString());
类似地,由于
null
是可空类型的默认值,因此也可以使用:
default(DateTime?
而不是
null

member.ClosedOn = reader[6].ToString().Equals(DBNull.Value) || 
                  reader[6].ToString().Equals("") 
    ? (DateTime?) null
    : Convert.ToDateTime(reader[6].ToString());
member.ClosedOn = reader[6].ToString().Equals(DBNull.Value) || 
                  reader[6].ToString().Equals("") 
    ? default(DateTime?)
    : Convert.ToDateTime(reader[6].ToString());

尝试
(DateTime?)null
。基本上,如果没有一点帮助,条件无法确定类型。此外,您应该能够执行
reader.IsDbNull(6)
reader[6]返回什么?如果是字符串,则没有理由使用
ToString()
完全可以。如果是datetime,就根本没有理由使用任何代码。您是否尝试将其转换为
datetime?
,例如
(datetime?)阅读器[6]
?@PanagiotisKanavos假设
reader
是一个
DbDataReader
,那么它就是一个
对象
,可以是
DateTime
或者
DbNull
,假设该列的数据类型是一个日期。@juharr因此首先提出了一个问题,然后是重复的问题。如果值是d,那么公认的答案就是错误的ate已经存在。很可能
读卡器[6]
已经是
日期时间
,即使它没有将字符串与
DBNull进行比较。值
将始终为false