C#如果不为NULL,则仅分配日期时间值

时间:2018-10-18 10:40:04

标签: c# asp.net datetime

我们有一个自定义对象,我正在尝试从数据集中分配和填充该对象。除非datetime字段中没有NULL值,否则它将正常工作。

这是对象示例:

Linking.canOpenURL('market://details?id=com.inova.velocity')
      .then((canOpen) => {
        if (canOpen) { 
          console.log('open app'); 
          return Linking.openURL('market://details?id=com.inova.velocity')
                 };
        }).catch(err => console.log('An error occurred', err));

我们想知道,如果值是null,如何最好地解析分配任何值:

public class Test
{

    public DateTime Date1{ get; set; }
    public DateTime Date2{ get; set; }
 }

以下内容在为null时引发异常(应如此)。只是想知道最佳实践来解决这个问题?请注意,由于有外部应用,我们不能使用可为空的datetime(datetime?)。

理想的是,我们不希望将日期时间分配为null

4 个答案:

答案 0 :(得分:0)

您可能想要分配一些默认值,例如:

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

答案 1 :(得分:0)

您可以检查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();

答案 2 :(得分:-1)

您是否可以使用DateTime.TryParse尝试将字符串转换为dateTime,但如果不能,则将使用dateTime.minValue?

答案 3 :(得分:-1)

您要对输入值进行完整性检查吗?如果是这样,我所谓的“被动错误报告”可能就是这种方式。

INotifyDataErrorInfo的全部目的是向用户介绍问题-并允许您在提交之前检查是否有错误-无需“重新排序”为异常。

您经常在WPF中使用它,在WPF中,可能要求ViewModel接受数字的可为空值甚至是字符串(出于完全视图的原因),但是Model不能接受Null值或经过解析的整数。