【发布时间】:2015-11-27 08:07:03
【问题描述】:
我有以下 C# 设置:
DateTime DOB;
DateTime.TryParse(dicGuarantor["DateOfBirth"].ToString(), out DOB);
....
DateOfBirth = DOB;
我的问题与TryParse 失败的情况有关。
据我了解,变量
DateTime DOB
将保持未分配状态,这意味着在这种情况下,当代码到达该行时:
DateOfBirth = DOB;
它会给出与使用未分配变量有关的错误。
但是,这在我的代码中似乎没有发生,没有发生错误并且页面按预期显示。
我担心这里确实存在错误,但我没有看到它,并且代码会因此而中断。
谁能澄清一下 - 网上似乎没有多少可以回答这个问题。
作为说明,我试过了:
DateTime DOB = null;
在声明中,但上面写着:
'无法将 null 转换为 'System.DateTime',因为它是 非空值类型'
编辑:
鉴于下面的答案,我将首先将变量DateOfBirth的声明添加到问题中:
public DateTime? DateOfBirth { get; set; }
这意味着这是nullable DateTime Obeject
现在,假设 TryParse 失败,它将分配的变量:
DOB = DateTime.MinValue;
因此:
DateOfBirth = DateTime.MinValue;
现在在代码的其他地方,
我有以下几点:
if (DateOfBirth.HasValue)
...
从运行代码来看,当DateOfBirth 被赋值为DateTime.MinValue 时,这似乎会返回false
这符合预期吗?
【问题讨论】:
-
不能设置DOB=null,如果需要,需要声明为nullable
-
dicGuarantor["DateOfBirth"]中存储的值的类型是什么?如果它已经是 DateTime,只需转换:DOB = (DateTime)dicGuarantor["DateOfBirth"];
标签: c#