【问题标题】:How to set DateTime to null如何将日期时间设置为空
【发布时间】:2013-05-27 08:32:59
【问题描述】:

使用 C#。我有一个字符串dateTimeEnd

如果字符串格式正确,我希望生成一个DateTime 并将其分配给 eventCustom.DateTimeEnd 类型

public Nullable<System.DateTime> DateTimeEnd { get; set; }

如果dateTimeEnd 为空或为空,我需要将eventCustom.DateTimeEnd 设置为空。

我正在尝试使用以下代码来实现这一点,但对于 eventCustom.DateTimeEnd,我总是为空。

您能帮我定义一下我的代码有什么问题吗?

   DateTime? dateTimeEndResult;
     if (!string.IsNullOrWhiteSpace(dateTimeEnd))
        dateTimeEndResult = DateTime.Parse(dateTimeEnd);


eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    看起来你只是想要:

    eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
        ? (DateTime?) null
        : DateTime.Parse(dateTimeEnd);
    

    请注意,如果dateTimeEnd 不是有效日期,这将引发异常。

    另一种选择是:

    DateTime validValue;
    eventCustom.DateTimeEnd = DateTime.TryParse(dateTimeEnd, out validValue)
        ? validValue
        : (DateTime?) null;
    

    如果dateTimeEnd 无效,现在会将结果设置为null。请注意,TryParsenull 作为输入处理,没有任何问题。

    【讨论】:

    • 不应该是其他方式吗?我的意思是当字符串包含"IsNullOrWhiteSpace" 时,应为该字段分配空值,因此(DateTime?) null 应位于条件运算符之后
    • @sohaiby:是的,很好看。会修复的。
    • 而是default(DateTime?)?
    • @GertArnold:它们是等价的——不管你用哪个。
    【解决方案2】:

    DateTime 是不可为空的值类型

    DateTime? newdate = null;
    

    您可以使用Nullable&lt;DateTime&gt;

    c# Nullable Datetime

    【讨论】:

      【解决方案3】:

      这应该可行:

      if (!string.IsNullOrWhiteSpace(dateTimeEnd))
          eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd);
      else
          eventCustom.DateTimeEnd = null;
      

      请注意,如果字符串格式不正确,这将引发异常。

      【讨论】:

      • dateTimeEndResult 怎么可能是true?这是DateTime?,而不是bool
      • 尝试这个我得到错误 2 运算符'=='不能应用于'System.DateTime'类型的操作数?和“布尔”
      • @JonSkeet 我在测试时输入了错误的类型。我现在更正了。
      【解决方案4】:

      这一行:

      eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
      

      等同于:

      eventCustom.DateTimeEnd = dateTimeEndResult = (true ? (DateTime?)null : dateTimeEndResult);
      

      因为条件运算符? 的优先级高于赋值运算符=。这就是为什么eventCustom.DateTimeEnd 总是为空的原因。 (MSDN Ref)

      【讨论】:

        【解决方案5】:

        你可以写 约会时间?新日期 = 空;

        【讨论】:

          【解决方案6】:

          很简单

          //declare date object
          maxDate: Date;
          //assign value
          
          this.maxDate=new Date(event.value._d); //event.value._d is date formate
          //setting date Object to null
          this.maxDate=null;
          

          【讨论】:

          • 你确定这是有效的 C#?
          【解决方案7】:

          现在,我不能使用DateTime?,我对所有数据类型都使用DBNull.Value。效果很好。

          eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
            ? DBNull.Value
            : DateTime.Parse(dateTimeEnd);
          

          【讨论】:

          • DbNull.Valuenull 绝对不一样,使用非常有限。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-19
          • 1970-01-01
          • 1970-01-01
          • 2010-12-10
          相关资源
          最近更新 更多