使用C#。我有一个字符串dateTimeEnd
。
如果字符串格式正确,我希望生成DateTime
并将其分配给类型为
public Nullable<System.DateTime> DateTimeEnd { get; set; }
如果dateTimeEnd
为空或空,我需要将eventCustom.DateTimeEnd
设置为空。
我正在尝试使用以下代码实现此目的,但eventCustom.DateTimeEnd
始终为null。
你能帮我解决一下代码中的错误吗?
DateTime? dateTimeEndResult;
if (!string.IsNullOrWhiteSpace(dateTimeEnd))
dateTimeEndResult = DateTime.Parse(dateTimeEnd);
eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
答案 0 :(得分:96)
看起来你只是想要:
eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
? (DateTime?) null
: DateTime.Parse(dateTimeEnd);
请注意,如果dateTimeEnd
不是有效日期,则会引发异常。
另一种选择是:
DateTime validValue;
eventCustom.DateTimeEnd = DateTime.TryParse(dateTimeEnd, out validValue)
? validValue
: (DateTime?) null;
如果null
无效,现在会将结果设置为dateTimeEnd
。请注意TryParse
处理null
作为输入没有问题。
答案 1 :(得分:13)
答案 2 :(得分:3)
这应该有效:
if (!string.IsNullOrWhiteSpace(dateTimeEnd))
eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd);
else
eventCustom.DateTimeEnd = null;
请注意,如果字符串的格式不正确,则会抛出异常。
答案 3 :(得分:3)
这一行:
eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
与:
相同eventCustom.DateTimeEnd = dateTimeEndResult = (true ? (DateTime?)null : dateTimeEndResult);
因为条件运算符?
的优先级高于赋值运算符=
。这就是eventCustom.DateTimeEnd
总是为空的原因。 (MSDN Ref)
答案 4 :(得分:1)
你可以写 约会时间? newdate = null;
答案 5 :(得分:0)
现在,我无法使用DateTime?
,我使用DBNull.Value
表示所有数据类型。它很棒。
eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
? DBNull.Value
: DateTime.Parse(dateTimeEnd);