1

这是我的代码:

            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()代码命中时,我DateTime的 Dob 对象是:

在此处输入图像描述

Dod的DateTime对象是:

在此处输入图像描述

问题:为什么Dod仍然是“1-1-1800”(我分配的初始值),但Dob设置正确?它不喜欢“2007-02-28”的Dod值吗?

4

2 回答 2

3

DateTime.TryParse(p.birthday, out Dob)成功转换stringDateTime,所以它返回真。你用 反转这个!,给出错误。

当执行到达&&操作符时,它会看到第一个操作数已经是false,因此不必费心执行第二个操作数。

您可以预先执行两者,也可以使用非快捷方式 AND 运算符&.

编辑:或

if (!(DateTime.TryParse(p.birthday, out Dob) || DateTime.TryParse(p.deathday, out Dod)))
{
    ...
}
于 2013-09-30T23:50:53.297 回答
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.
于 2013-09-30T23:55:10.827 回答