Nano Hash - криптовалюты, майнинг, программирование

VB.NET — создать Nullable (Of T) с HasValue = False

Я работаю с базой данных SQL Server, которая регулярно имеет столбцы DateTime, которые могут быть нулевыми. Я использую LINQ to SQL для подключения моей программы WinForms (VB.NET) к данным.

Я расширил некоторые объекты LINQ и добавил пару свойств Nullable(Of DateTime). По сути, я вычисляю, существует ли конкретное значение. Значение равно DateTime. Если он не существует, я хочу создать объект Nullable(Of DateTime) (структуру, что угодно) со свойством HasValue, установленным на False.

Я провел некоторое исследование, и, по-видимому, конструктор New для Nullable(Of T) создает один с HasValue, установленным в True.

Два вопроса:

  1. Почему это? Поскольку структура Nullable(Of T) была создана специально для такого типа ситуаций, почему поведение по умолчанию будет HasValue = True?
  2. Каков наилучший способ инициализировать Nullable(Of T), чтобы он действительно был null?

Спасибо!


Ответы:


1

Если вы предоставляете значение конструктору Nullable, тогда он будет иметь заданное значение, что приведет к описанному вами сценарию, где HasValue истинно.

Чтобы объявить nullable с HasValue из false, вы можете использовать любой из этих подходов:

Dim x As Nullable(Of DateTime)
Dim y As DateTime?

Однако, если вы используете конструктор и предоставляете значение, обнуляемая структура не будет иметь нулевого значения, и ее HasValue будет true:

Dim z As New Nullable(Of DateTime)(DateTime.Now)
14.11.2011

2

Ответ Ахмада хорош. Также есть пустой конструктор, хотя, как ни странно, его нет в MSDN:

Dim x As New Nullable(Of DateTime)
Debug.Assert(x.HasValue = False)

Как и ожидалось, HasValue ложно. Если у вас есть Nullable(T) со значением и вы хотите удалить это значение, вы просто установите для него значение Nothing, как если бы это был ссылочный тип:

x = New Date(2011, 1, 1)
x = Nothing
Debug.Assert(x.HasValue = False)
14.11.2011
  • Вы уверены, что это правильно? Я почти уверен, что пытался использовать Dim x as New Nullable(Of DateTime) и возвращал объект с HasValue = True и Value = '1/1/0001 00:00'. Я ошибаюсь? 15.11.2011
  • Есть причина, по которой я поместил эти Debug.Assert в пример кода, я запустил этот код, и Asserts гарантирует, что HasValue действительно ложно ;-) 16.11.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..