(忽略优化的编译器标志)
在某些系统上,这段代码会进入块吗?

if (Datetime.Now!=Datetime.Now)
{
 ...
}

我是说,它是如何评估这里的价值观的?(是按顺序的吗?)
有什么情况下情况可能是真的吗?
再次,忽略优化标志。

最佳答案

DateTime.Now内部呼叫:

public static DateTime Now
{
    get
    {
        return DateTime.UtcNow.ToLocalTime();
    }
}

内部要求:
public static DateTime UtcNow
{
    get
    {
        long systemTimeAsFileTime = DateTime.GetSystemTimeAsFileTime();
        return new DateTime((ulong)(systemTimeAsFileTime + 504911232000000000L | 4611686018427387904L));
    }
}

其中GetSystemTimeAsFile是返回系统时钟信息的windowsapi函数。准确度取决于系统,所以。
如果有延迟,由于某些原因,不同get(DateTime.Now)之间可能会产生足够不同的结果,从而导致相等比较器失败。但就我个人而言,我从未遇到过这种情况。

07-24 09:47
查看更多