Подтвердить что ты не робот

Когда следует использовать типы с нулевым значением в С#?

Во многих интервью меня неоднократно задавали следующие вопросы.... Но все же не могу объяснить их простым примером...

  • Какие типы с нулевым значением в С#?
  • Когда нужно использовать типы с нулевым значением в С#?
  • Можете ли вы привести простой пример?

Любые предложения?

4b9b3361

Ответ 1

Из Использование Nullable Types (Руководство по программированию на С#)

Пример того, когда вы можете использовать тип NULL, рассмотрим, как обычная булева переменная может иметь две значения: true и false. Здесь нет значение, которое означает "undefined". В многие программные приложения, большинство в частности взаимодействия с базами данных, переменные могут существовать в undefinedгосударство. Например, поле в база данных может содержать значения true или false, но он также не может содержать ценность вообще. Аналогично, ссылка типы могут быть установлены в нуль, чтобы указать что они не инициализированы.

Ответ 2

Null означает "no value" или "no data". Вы используете типы с нулевым значением, когда "no value" является допустимым значением в контексте любой системы, которую вы хотите/используете.

int? weightOfCargo = TryGetTruckCargoWeight()

В этом случае тип NULL указывает, что TryGetTruckCargoWeight() может возвращать значение null. Смысл этого в том, что данные недоступны (может быть, нет грузовика, возможно, он не был взвешен и т.д.).

Ответ 3

Рассмотрим следующий пример:

Инструмент имеет настройки, заданные с помощью пользовательского интерфейса. Однако инструмент также можно запустить из командной строки, и параметры, указанные в пользовательском интерфейсе, могут быть переопределены через командную строку. Таким образом, код выглядит следующим образом:

bool? setting1;

... Командная строка процесса, если указанная установка:

setting1.Value = setting;

... позже

if(setting1.HasValue)
  ui.setting1 = setting1.Value

Ответ 4

Всякий раз, когда вы используете назначенные значения для представления нулевого значения:
* Минимальное значение DateTime для представления значения ничего
* -1 для представления неустановленного значения для целого числа
то лучшим вариантом будет вариант с нулевым значением.

Ответ 5

Как мы все знаем, в С#

существуют два разных типа:

• Тип запрета
• Тип значения
Тип ссылки может быть представлен как несуществующее значение (NULL), но тип Vaue, однако не может представлять значение NULL.
Например, например,

Поскольку String является ссылочным типом, вы можете объявить его как null

 String s=null;  //ok

Но если вы попытаетесь объявить тип значения, такой как Int32 равным null, это приведет к ошибке компилятора

Int32 i=null;    // compiler error

Чтобы представить null в типе значения, вы должны использовать специальную конструкцию с именем nullable type. Он представлен с использованием? символ.

Int32? I=null; //now its ok

Теперь сценарий, когда типы с нулевым значением, используемые в явном виде, используются в программировании базы данных, где calss - это карта с таблицей с нулевыми столбцами.
• Если столбцы являются ссылочным типом, который является строкой, такой как (адрес электронной почты и адрес клиента), нет проблем, поскольку вы можете определить его как null в С#
• Но если столбцы имеют тип значения, который является двойным, например (баланс учетной записи клиента), вы не можете сопоставить его с С# без использования типов с нулевым значением.
Например, например,
// сопоставляется с таблицей Customer в базе данных


public class Customer
{
  ...
  public decimal? AccountBalance;
}

Ответ 6

Еще один пример:

представьте, вам нужно создать метод GetArticles в вашем BLL. Этот метод должен принимать такие аргументы, как аргументы даты (from и to), строку поиска (аргумент search) и категорию документа (categoryId). Все эти аргументы являются необязательными. Поэтому в одном случае вы хотите определить только аргументы from и search, только в другом аргументе categoryId.

Чтобы сделать это, вы можете создать много перегрузок для метода GetArticles с необходимой комбинацией аргументов. Другой способ - определить для этого единственный метод GetArticles(DateTime? from, DateTime? to, string search, int? categoryId). В этом случае, если аргумент null, он будет пропущен.

Из-за этого я знаю о новой функции в .NET 4.0, называемой необязательных параметрах и именованных аргументах, но до этого это было прекрасное решение для я.

Ответ 7

С# имеет два типа типов данных. Тип значения и ссылочные типы. String - ссылочный тип, а int - тип значения. Тип ссылки может быть назначен с нулевым значением, например string s = null;. Но вы не можете присвоить значение null прямо целому числу. Подобно int a = null // Итак, чтобы тип значения принял нулевое значение, используются типы с нулевым значением. Чтобы сделать его нулевым, в

добавлен ?
? a = null;//ok.

Ответ 8

// to replace   
// if(foo.Id > 0)
if(foo.Id.HasValue)
{
    Update(foo);
}
else
{
    Insert(foo);
}

Ответ 9

Я думаю, если мы расскажем о сценарии реального мира, когда ваша таблица базы данных содержит в ней столбцы с нулевым значением, и вам нужно создать DTO (объекты передачи данных) как отображение сущности Db. В таких сценариях вам необходимо получить то же самое сопоставление типов данных в классах Entity. Для достижения такого требования типы с нулевым значением действительно очень полезны для создания точно такого же сопоставления и позволяют пользователю легко работать в этом senario.

С уважением.