代码之家  ›  专栏  ›  技术社区  ›  Jarrett Widman

datetime.now在语句中

  •  4
  • Jarrett Widman  · 技术社区  · 15 年前

    在下面 thisIsAlwaysTrue 应该永远是真的。

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

    但是DateTime现在的工作方式是保证IsthisalwayStrue是真的吗?或者时钟可以在对now属性的引用之间改变吗?

    bool isThisAlwaysTrue = DateTime.Now == DateTime.Now;
    
    4 回复  |  直到 13 年前
        1
  •  10
  •   500 - Internal Server Error    15 年前

    时钟肯定可以在两个到datetime的背靠背调用之间切换。

        2
  •  8
  •   Joel Coehoorn    15 年前

    DateTime.Now属性是不稳定的,这意味着它肯定可以在两次使用之间更改。但是你分配给它的变量不是易变的。

    因此,这应该始终将result设置为true:

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

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

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

    bool result = DateTime.Now == DateTime.Now;
    
        3
  •  1
  •   Hans Passant    15 年前

    我建议你自己试试这个。在发布版本中,此代码只需几秒钟:

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

    我相信它会受到很好的谴责。

        4
  •  0
  •   Michael Stum    15 年前

    DateTime是不可变的,因此一旦分配,它将永远不会更改。你的电话到现在为止。现在不“链接”他们-它只是分配什么 价值 现在是调用变量d的时候-它不会分配某种引用。

    如果你有这样的延误:

    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