Как заткнуть рот компилятору


5 0

Какой кайф от использования свойства Value? Уже не в первый раз у нас на работе укладывают разные части сайта тем, что используют что-то типа:

int? test = 1;

int test2 = test.Value;

Я спросил программиста, который написал подобного плана код - нафига ты использовал свойство Value? Я никогда это свойство не использовал (на самом деле использовал, интересно было узнать, что скажет программер на это), поэтому не понимаю смысла от его использования. Ответ программиста, который написал подобный код - я использовал Value, чтобы заткнуть компилятор. просто test2 не позволяет принимать нулевые значения, поэтому следующий код не скомпилируется:

int? test = 1;

int test2 = test;

У свойства Value есть полезные свойства, но никогда не используйте его чтобы просто заткнуть компилятор.

1. Если в переменной test окажется значение null, то приложение рухнет.

2. Если в переменной test не может быть null и вы в этом уверены, то просто не объявляйте эту переменную как int? и не будет проблем

3. Если не можете изменить тип переменной test, а нужно превратить переменную в ненулевую int, не затыкайте рот компилятору свойством Value. Обязательно проверяйте на нулевое значение и выбрасывайте более информативное исключение:

int? test = null;

if (test == null)

  throw new Exception("Какой идиот присвоил в test значение null?");

int test2 = test.Value;

Если вы согласны воспринимать null как 0, то можно написать так:

int? test = null;

int test2 = test ?? 0;

Но никогда не пишите код только для того, чтобы заткнуть рот компилятору. Компилятор - это помощник, а не враг программиста. В том числе не игнорируйте предупреждения. 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Dampir

20 Марта 2013

Обычно для Nullable типов еще пишут

if (!test.HasValue())
throw new NullReferenceException();

или

if (test.HasValue())
{
    // Do something
}


Михаил Фленов

20 Марта 2013

Можно использовать и HasValue


РеШарпер

20 Марта 2013

А что такое int?  ???


Михаил Фленов

20 Марта 2013

Это целое число, которое может принимать значени null. По другому еще Nullable<Int32>.


Evilgen

22 Марта 2013

Компилятор - это маленькая злобная программа, которая мешает запустить мне мое приложение. Постоянно находит какие-то ошибки.

- Так заткните его! Раз и навсегда! Вы всё поняли??
- Конечно, босс.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне