#c#
#c#
Вопрос:
У меня есть 1 поле datetime, которое не обнуляется, и 1, которое обнуляется. Я могу использовать следующий код с ненулевым значением :
c.StartDate.Day.ToString() "/"
c.StartDate.Month.ToString() "/"
c.StartDate.Year.ToString()
Но когда я пытаюсь сделать это с помощью nullable, я получаю ошибку :
‘Система.Nullable’ не содержит определения для ‘Day’ и никакого метода расширения ‘Day’, принимающего первый аргумент типа ‘System.Удалось найти Nullable’ (вам не хватает директивы using или ссылки на сборку?)
Как мне получить день, месяц, год для nullable datetime?
Ответ №1:
Вам придется использовать .Value
свойство в вашем nullable:
c.StartDate.Value.Day.ToString() //etc
После проверки на null
вы могли бы:
c.StartDate.Value.ToString("dd-MMM-yyyy");
Комментарии:
1. Но при необходимости сначала проверьте значение HasValue
2. Я бы также добавил нулевую проверку или использование . GetValueOrDefault() на всякий случай.
3. В качестве альтернативы, вы можете назначить новую переменную, приведенную к ненулевому DateTime —
var startDate = (DateTime)c.StartDate;
, и тогдаstartDate.Day
это должно сработать.
Ответ №2:
if(c.StartDate.HasValue)
{
DateTime sd = c.StartDate.Value;
str = sd.Day.ToString() "/" sd.Month.ToString() "/" sd.Year.ToString()
}
else
str = "some alternative for when there's no date";
Еще проще:
string str = c.StartDate.HasValue ? c.StartDate.value.ToString(@"d/M/yyyy") ? "some alternative for when there's no date";
Ответ №3:
if(c.EndDate.HasValue)
{
c.EndDate.Value.Day.ToString() ...
}
Вы также можете захотеть проверить ToString()
значение даты и преобразовать его в строку только с одним шаблоном форматирования и без объединения.
Ответ №4:
Каким бы вы хотели видеть результат? «//»
Вы могли бы создать методы расширения, которые возвращают «», но у вас все еще есть проблема с тем, каким вы хотите, чтобы на самом деле был конечный результат.