C#如果不为空,则仅指定日期时间值

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()

我们有一个自定义对象,我正试图从数据集分配和填充它。除非datetime字段中有空值,否则它可以正常工作

以下是对象示例:

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)。