четверг, 6 сентября 2007 г.

Nullable типы в C#

Разбираясь с примером по WWF наткнулся на странное объявление переменной. Выглядело это примерно так:

int? i;

Недолгие поиски в гугле привели меня на сайт MSDN.

Как оказалось - такие типы имеют еще одно значение - null, показывающее, что значение не установлено. Сделано это, в основном, для совместимости с логикой работы с типами в базах данных.

Как это работает.

Объявленный таким способом тип имеет помимо прочих еще два члена:

  • HasValue - показывает, не записано ли null в Value
  • Value - содержит само значение переменной нашего типа

В случае, если данные в переменную не записаны (т.е. фактически она равна null), то при попытке как-то взаимодействовать с такой переменной мы получаем InvalidOperationException. Если данные записаны - то все работает так же как и у переменных обычного типа.

Примеры:


int? x = 10;
if (x.HasValue)
    System.Console.WriteLine(x.Value);
else
    System.Console.WriteLine("Undefined");

int? y = 10;
if (y != null)
    System.Console.WriteLine(y.Value);
else
    System.Console.WriteLine("Undefined");

3 комментария:

  1. Всвязи с нехваткой времени долго и упрорно по изучать C# страдал от отсутвия null. Можно конечно обойтись переменныйми типа object, но это же непонячтный код получится. Спасибо автору что ткнул носом. (...теперя я в два раза счастливее стану... )

    ОтветитьУдалить
  2. Вообще, чем дольше я программирую под .Net Framework тем все сильнее восхищаюсь его создателями. Такое ощущение, что его разработчики решили добавить в библиотеку классов (да и в язык - тоже) вообще все-все-все :) По-крайней мере за последние четыре года (по мере изучения C# и фреймворка в целом) размер моего кода сократился эдак раз в 10. Там где я раньше создавал класс, сейчас я использую 1-2 строки кода, причем результат - или тот же самый или лучше :)

    ОтветитьУдалить
  3. Ну мог бы поподробней расписать, на английском то больше всего там по ссылке :)

    ОтветитьУдалить