DateTime.Now在一个语句中

时间:2010-04-06 21:39:20

标签: c# .net datetime

在下面thisIsAlwaysTrue应始终为真。

DateTime d = DateTime.Now;
bool thisIsAlwaysTrue = d == d;

但DateTime.Now是否以这样的方式工作,即theThisAlwaysTrue保证是真的?或者时钟可以在对Now属性的引用之间改变吗?

bool isThisAlwaysTrue = DateTime.Now == DateTime.Now;

4 个答案:

答案 0 :(得分:10)

时钟肯定会在两次背靠背调用DateTime.Now;

之间发生变化

答案 1 :(得分:8)

DateTime.Now属性是volatile,这意味着它绝对可以在使用之间进行更改。但是你赋给它的变量不是易变的。

所以这应该始终将结果设置为true:

DateTime d = DateTime.Now;
bool result = d == d;

它将DateTime.Now返回的值赋给d变量,而不是属性本身。因此,d将始终等于该代码中的d。

但是这并不总是将结果设置为true:

bool result = DateTime.Now == DateTime.Now;

答案 2 :(得分:1)

我不得不建议你亲自试试。此代码在Release版本中只需几分之一秒:

using System;

class Program {
  static void Main(string[] args) {
    while (DateTime.UtcNow == DateTime.UtcNow) ;
    Console.WriteLine("oops");
    Console.ReadLine();
  }
}

我相信它会很好地重复。

答案 3 :(得分:0)

DateTime是不可变的,因此一旦分配就永远不会改变。您对DateTime.Now的调用不会“链接”它们 - 它只是分配 DateTime.Now在调用变量d时 - 它不会分配某种引用。< / p>

所以如果你有这样的延迟:

DateTime d = DateTime.Now; // Let's assume it's 9:05:10
Thread.Sleep(100);
Console.WriteLine(d); // will still be 9:05:10, even though it's much later now