DateTime.Now в заявлении - PullRequest
       1

DateTime.Now в заявлении

4 голосов
/ 07 апреля 2010

В ниже thisIsAlwaysTrue всегда должно быть верно.

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

Но работает ли DateTime.Now таким образом, что IsAlwaysTrue гарантированно соответствует действительности? Или часы могут меняться между ссылками на свойство Now?

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

Ответы [ 4 ]

10 голосов
/ 07 апреля 2010

Часы могут определенно переключаться между двумя параллельными вызовами на DateTime.Now;

8 голосов
/ 07 апреля 2010

Свойство DateTime.Now является изменчивым, то есть оно определенно может меняться в зависимости от использования. Но переменная, которой вы ее назначаете, не является изменчивой.

Таким образом, это всегда должно устанавливать для результата значение true:

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

Он присваивает значение, возвращаемое DateTime.Now, переменной d, а не самому свойству. Таким образом, d всегда будет равно d в этом коде.

Но это не всегда устанавливает результат в true:

bool result = DateTime.Now == DateTime.Now;
1 голос
/ 07 апреля 2010

Я бы порекомендовал вам попробовать это для себя. Этот код занимает доли секунды в сборке выпуска:

using System;

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

Я верю, что это будет хорошо.

0 голосов
/ 07 апреля 2010

DateTime является неизменным, поэтому он никогда не изменится после назначения. Ваш вызов DateTime.Now не «связывает» их - он просто присваивает значение DateTime.Now во время вызова переменной 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...