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