这是我的代码:
DateTime Dob = Convert.ToDateTime("1/1/1800");
DateTime Dod = Convert.ToDateTime("1/1/1800");
if (!DateTime.TryParse(p.birthday, out Dob) && !DateTime.TryParse(p.deathday, out Dod))
{
// handle error
}
p.birthday
是:
p.deathday
是:
当.TryParse()
代码点击时,Dob的DateTime
对象为:
Dod的DateTime
对象是:
问题:为什么Dod
仍为“1-1-1800”(我指定的初始值),但Dob
设置正确?关于“2007-02-28”的Dod值有什么不喜欢的吗?
答案 0 :(得分:3)
DateTime.TryParse(p.birthday, out Dob)
成功将string
转换为DateTime
,因此返回true。你用!
反转它,给出错误。
当执行到达&&
运算符时,它看到第一个操作数已经是false
,因此不会打扰执行第二个操作数。
您既可以预先执行,也可以使用非快捷方式AND运算符&
。
编辑:或
if (!(DateTime.TryParse(p.birthday, out Dob) || DateTime.TryParse(p.deathday, out Dod)))
{
...
}
答案 1 :(得分:1)
原因是它正在执行!(DateTime.TryParse(p.birthday,out Dob)并返回false。 因此!不执行DateTime.TryParse(p.deathday,out Dod)。
根据
http://msdn.microsoft.com/en-us/library/2a723cdk.aspx
x && y
if x is false, y is not evaluated, because the result of the
AND operation is false no matter what the value of y is. This is known as
"short-circuit" evaluation.