- 1
idPlansList = ViewState["idPlansList"] is List<int> ? (List<int>)ViewState["idPlansList"] : new List<int>();
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+127.4
idPlansList = ViewState["idPlansList"] is List<int> ? (List<int>)ViewState["idPlansList"] : new List<int>();
ViewState - известный словарь (не дженериковый), хранит данные любых типов. А тут народ проверяет не на null, а на is! Т.е. что, в словаре под данным ключом может быть обжект другого типа?! Это способ 1) сделать помойку, и 2) дольше не найти косяк, если под тем же ключом где-то влепят обжект другого типа. Ну, создаётся каждый раз - и создаётся. Упасть-то не упало :)
Более пральный вариант вроде такого:
idPlansList = (List<int>)ViewState["idPlansList"] ?? new List<int>();
idPlansList = ViewState["idPlansList"] as List<int> ?? new List<int>();
Но как подсказывает MSDN Это развернется в код следующего типа
idPlansList = (ViewState["idPlansList"] is List<int> )? (List<int>)ViewState["idPlansList"] : null)?? new List<int>();
Наверно наиболее правильный вариант это
List<int> tmp = ViewState["idPlansList"] as List<int>;
idPlansList = tmp?? new List<int>();
Откуда такой страх перед исключениями в нужных ситуациях?
Азы объяснять? :) Если в словаре ничего нет (null), он приведётся к null. Если есть List<int>, приведётся к нему. Если не пусто и не List<int>, упадёт, т.к. прокосячили. Если же автор ТАК И ЗАДУМЫВАЛ хранить в словаре значения, то - в Индии сейчас тепло.
Откуда такой страх перед исключениями в нужных ситуациях?