Разбираясь с примером по 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");
Всвязи с нехваткой времени долго и упрорно по изучать C# страдал от отсутвия null. Можно конечно обойтись переменныйми типа object, но это же непонячтный код получится. Спасибо автору что ткнул носом. (...теперя я в два раза счастливее стану... )
ОтветитьУдалитьВообще, чем дольше я программирую под .Net Framework тем все сильнее восхищаюсь его создателями. Такое ощущение, что его разработчики решили добавить в библиотеку классов (да и в язык - тоже) вообще все-все-все :) По-крайней мере за последние четыре года (по мере изучения C# и фреймворка в целом) размер моего кода сократился эдак раз в 10. Там где я раньше создавал класс, сейчас я использую 1-2 строки кода, причем результат - или тот же самый или лучше :)
ОтветитьУдалитьНу мог бы поподробней расписать, на английском то больше всего там по ссылке :)
ОтветитьУдалить