При разработке приложения с нуля можно сделать некоторый образованный выбор о том, когда назвать свободным. Ваш пример программы прекрасен: это выделяет память, возможно, у Вас есть он работа в течение нескольких секунд, и затем закрывается, освобождая все ресурсы, которых это требовало.
, Если Вы пишете что-либо еще, хотя - приложение сервера / продолжительное приложение или библиотека, которая будет использоваться кем-то еще, необходимо ожидать называть свободным на всем Вы malloc.
Игнорирование прагматически настроенной стороны в течение секунды, намного более безопасно следовать за более строгим подходом и вынудить себя освободить все Вы malloc. Если Вы не имеете привычку наблюдать за утечками памяти каждый раз, когда Вы кодируете, Вы могли легко пружинный несколько утечек. Так, другими словами, да - можно уйти без него; будьте осторожны, все же.
Здесь есть 3 общих подхода;
(возможно, когда вы извлекаете его из средства чтения данных), тогда DBNull.Value
может представлять null. Я не склонен выпускать это за пределы уровня данных, хотя DateTime.MinValue
обычно интерпретируется как null
; возможно, магическое число - но оно работает и поддерживается большинством привязок данных и т.д. Nullable
означает, что вы можете использовать DateTime?
- т.е. значение nullable-of-DateTime; просто используйте DateTime?
везде, где вы имеете в виду DateTime
, который может быть нулевым, и вы можете дать ему значение null
или действительное DateTime
. Некоторые другие мысли о доступе к данным и значениях NULL:
SqlCommand
вы должны использовать DBNull.Value
, not null
- см. ниже reader.IsDbNull (порядковый номер)
командный материал (с Nullable
в качестве примера):
param.Value = when.HasValue ? (object)when.Value : DBNull.Value;
Использовать DateTime?
Какая конкретно у вас проблема?
- Изменить
Просто так понятно, это Nullable
Объект DateTime, не вопрос :)
DateTime? t = null;
- Edit
Отвечая на комментарий, отметьте его так:
DateTime? theTime;
if( table["TheColumn"] == DBNull.Value ){
theTime = null;
} else {
theTime = (DateTime) table["TheColumn"];
}