DateTime.Ticks для обнуляемой даты и времени - PullRequest
3 голосов
/ 03 октября 2011

В моем приложении article.DatePublished - это поле типа DateTime, которое можно обнулять.Теперь у меня есть следующий код:

      list.Add(article.DatePublished.Ticks);

Здесь я получаю ошибку компиляции, так как свойство Ticks не работает со значениями типа DateTimes.

Один из способов обработки этого:

if (article.DatePublished != null)
      list.Add(((DateTime)article.DatePublished).Ticks);

Это работает, но это элегантное решение?Или мы можем сделать это "лучше"?

Спасибо,

Vivek

Ответы [ 4 ]

5 голосов
/ 03 октября 2011

Вам необходимо получить .Value свойство DateTime?.

if (nullableDate != null) // or if (nullableDate.HasValue)
    ticks = nullableDate.Value.Ticks;

В противном случае вы можете использовать nullableDate.GetValueOrDefault().Ticks, что нормализует нулевую дату в значение по умолчанию DateTime, равное DateTime.MinValue.

3 голосов
/ 03 октября 2011

Как упоминал Икар, я бы использовал:

if (article.DatePublished != null)
{
    list.Add(article.DatePublished.Value.Ticks);
}

Или даже:

if (article.DatePublished.HasValue)
{
    list.Add(article.DatePublished.Value.Ticks);
}

В зависимости от того, что вы пытаетесь сделать, LINQ может дать вам более простой код:

var list = articles.Select(article => article.DatePublished)
                   .Where(date => date != null)
                   .Select(date => date.Ticks)
                   .ToList();
1 голос
/ 03 октября 2011
if (article.DatePublished.HasValue)
{
      list.Add(article.DatePublished.Value.Ticks);
}
0 голосов
/ 03 октября 2011

Если вы всегда хотите добавить значение, включая значение по умолчанию, если DatePublished имеет значение null, вы можете сделать что-то вроде

var date = article.DatePublished ?? new DateTime(whatever);
list.Add(date.Ticks);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...