在下面thisIsAlwaysTrue
应始终为真。
DateTime d = DateTime.Now;
bool thisIsAlwaysTrue = d == d;
但DateTime.Now是否以这样的方式工作,即theThisAlwaysTrue保证是真的?或者时钟可以在对Now属性的引用之间改变吗?
bool isThisAlwaysTrue = DateTime.Now == DateTime.Now;
答案 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