Система. DateTime? по сравнению с системой. DateTime

Здесь описано здесь . Основная реализация - в Objects/stringobject.c . Однако подклассы str, вероятно, не то, что вы хотите. Я бы предпочел здесь композицию; имеют объект со строковым полем и особым поведением.

27
задан Dal 13 November 2009 в 14:29
поделиться

5 ответов

? означает, что тип допускает значение NULL. Подробнее см., Например, MSDN

Nullable - это поддерживаемая компилятором оболочка вокруг типов значений, которая позволяет типам значений становиться пустыми.

Чтобы получить доступ к значению DateTime, вам необходимо сделать следующее:

DateTime? dateOrNull = myCalendarExtender.SelectedDate;
if (dateOrNull != null)
{
    DateTime newSelectedDate = dateOrNull.Value;
}
46
ответ дан 28 November 2019 в 04:14
поделиться

DateTime? - это то же самое, что и Nullable<DateTime>. То есть: экземпляр DateTime? может содержать «NULL», а экземпляр DateTime - нет. (Это верно для всех типов значений, начиная с .NET 2.0. Тип значения не может содержать NULL, но, начиная с .NET 2.0, типы значений, допускающие значение NULL, поддерживаются с помощью конструкции Nullable<T> (или сокращения?).

Вы можете получить значение DateTime? И поместить его в DateTime, выполнив следующее:

DateTime? someNullableDate;
DateTime myDate;

if( someNullableDate.HasValue )
   myDate = someNullableDate.Value;

Другой, более краткий способ получить значение Nullable, это использование оператора слияния нуль:

DateTime myDate = someNullableDate?? default(DateTime);
22
ответ дан Frederik Gheysels 14 October 2019 в 12:34
поделиться

Элемент управления Calendar возвращает значение Nullable < DateTime > (сокращенно в C # это DateTime?) в свойстве SelectedDate, поскольку DateTime является структурой. Нулевое значение позволяет элементу управления иметь состояние «дата не выбрана». Таким образом, вам нужно проверить, имеет ли значение nullable значение, прежде чем вы сможете его использовать.

var nullable = myCalendarExtender.SelectedDate;
var newSelectedDate = (nullable.HasValue) ? nullable.Value : SomeDefaultValue;

РЕДАКТИРОВАТЬ: еще более кратким, благодаря комментарию Джоша:

var newSelectedDate = myCalendarExtender.SelectedDate ?? SomeDefaultValue;

Мне нравится!

9
ответ дан Travis Heseman 14 October 2019 в 12:34
поделиться

Вы можете использовать ?? для очень краткой работы с значениями NULL в C #. См. Мой комментарий к ответу Трэвиса для более короткого способа выражения концепции «если не null, то используйте его, иначе используйте какое-то значение по умолчанию». Они оба делают одно и то же.

2
ответ дан 28 November 2019 в 04:14
поделиться

Намного лучшее решение и лучшая функция IMO с классом, допускающим значение NULL

DateTime newSelectedDate = myCalendarExtender.SelectedDate.GetValueOrDefault();
10
ответ дан 28 November 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: