2010-03-02 5 views
0

В настоящее время я работаю с библиотекой и замечаю что-то странное при использовании функций, которые я уже сделал (где я должен делать кастинг).Зачем использовать Nullable, когда тип может быть назначен Null?

Библиотека была функция, определенная как

public DateTime? GetDate(){..} 

Какой смысл этого? Почему бы просто не сделать его обычным DateTime и вернуть null, как обычно, если есть ошибка получения даты? Не хватает ли чего-то значительного в Nullable типах?

+5

Не является ли DateTime структурой .NET? означает, что это тип ценности? –

+1

omg. Да, ваше право. Я тупой .. кто-то может закрыть это или дать мне ответ, говоря мне, что я тупой. – Earlz

+0

Да, по какой-то причине я еще не обнаружил, что DateTime - это тип значения. У меня никогда не было причины назначать Null для DateTime, я думаю .. – Earlz

ответ

10

Поскольку DateTime - это тип значения .NET. Точно так же, как int и char, он не может быть нулем

0

Типы значений не могут быть нулевыми. A Nullable (часто записывается DateTime?) может иметь значение null. Это справедливо и для всех типов значений. Если вы хотите, чтобы переменная имела допустимый Целое или Нуль, вам нужно объявить тип значения Int32?

У вас не может быть Nullable string. Я упоминаю об этом, потому что, хотя строки являются ссылочными типами, они ведут себя как типы значений разными способами; Я пытаюсь объявить Nullable. (Хорошо, я признаю это. Это был я.)

1

DateTime - тип значения. Он не может иметь значение null, присвоенное ему.

Редактировать: Если вы попытаетесь использовать? оператор ссылочного типа, вы получите следующее сообщение об ошибке:

The type 'object' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'

0

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

0

Не все типы являются ссылочными типами. Например, вы не можете сделать что-то вроде

int x = null; 

потому что int является типом значения. DateTime - тип значения.

0

«Почему бы просто не сделать его регулярным DateTime и возвращать нуль»

DateTime не может быть пустым.

Смежные вопросы