C#如果不为空,则仅指定日期时间值
我们有一个自定义对象,我正试图从数据集分配和填充它。除非datetime字段中有空值,否则它可以正常工作 以下是对象示例:C#如果不为空,则仅指定日期时间值,c#,asp.net,datetime,C#,Asp.net,Datetime,我们有一个自定义对象,我正试图从数据集分配和填充它。除非datetime字段中有空值,否则它可以正常工作 以下是对象示例: public class Test { public DateTime Date1{ get; set; } public DateTime Date2{ get; set; } } 我们想知道如果值为空,如何最好地通过解析赋值: var convertedList = (from rw in ds.Tables[0].AsEnumerable()
public class Test
{
public DateTime Date1{ get; set; }
public DateTime Date2{ get; set; }
}
我们想知道如果值为空,如何最好地通过解析赋值:
var convertedList = (from rw in ds.Tables[0].AsEnumerable()
select new Test()
{
Date1 = Convert.ToDateTime(rw?["StartDate"]),
Date2 = Convert.ToDateTime(rw?["EndDate"])
}).ToList();
下面的代码在null时抛出一个异常(应该是这样的)。只是想知道处理这个问题的最佳实践?注意:由于外部应用程序的原因,我们无法使用可为空的日期时间(datetime?)
理想情况下,如果为空,我们将不希望分配datetime。您是否可以不使用datetime.TryParse,它将尝试将字符串转换为datetime,但如果不能,则将使用datetime.minValue?您可以分配一些默认值,如:
Date1 = rw?["StartDate"]==null?DateTime.MinValue:Convert.ToDateTime(rw?["StartDate"]);
或者忽略那些具有空值的:
var convertedList = (from rw in dt2.AsEnumerable() where rw["StartDate"] != null && rw["EnDate"] != null
select new Test()
{
Date1 = (rw["StartDate"] == null ? Convert.ToDateTime(rw["StartDate"]) : new DateTime()),
Date2 = (rw["EndDate"] == null ? Convert.ToDateTime(rw["EndDate"]) : new DateTime())
}).ToList();
您可以检查NULL并替换为所需的日期
var convertedList = (from rw in dt2.AsEnumerable()
select new Test()
{
Date1 = (rw["StartDate"] == null ? Convert.ToDateTime(rw["StartDate"]) : new DateTime()),
Date2 = (rw["EndDate"] == null ? Convert.ToDateTime(rw["EndDate"]) : new DateTime())
}).ToList();
您是否要对输入的值进行健全检查?如果是这样的话,我称之为“被动错误报告”的方法可能就是这样 这一切都是关于告诉用户有关问题-并允许您在提交前检查是否存在错误-而不“诉诸”异常
您经常在WPF中使用它,在WPF中,ViewModel可能需要接受可为Null的值,甚至数字字符串(完全出于视图原因),但该模型不能接受Null值或除解析整数以外的任何内容。
理想情况下,如果为Null,我们不希望分配日期时间。如果不可为Null,则需要某种形式的值(即使它只是MinValue
或MaxValue
)。您希望它有什么值?我们存储的是日期,而不是可为空的日期。问题是,结束日期有时不会在数据库中分配任何值。那么就不需要调用Convert.ToDateTime
(如果它已经是DateTime
)。您能回答我第一条评论中的问题吗?我们存储的是日期,而不是可为空的日期。
如果数据库中的数据不是可为空的,那么rw是如何存储的?[“StartDate”]
返回null
?外部应用程序的约束条件是什么?它不能使用可为null的DateTime类型,还是只有当值为null时才有问题?您可以使属性DateTime?
并实现get
返回您选择的默认值(如果为null)。