- 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>();
guest 14.10.2009 18:05 # 0
guest 14.10.2009 22:16 # 0
guest 15.10.2009 16:39 # 0
Ztranger 15.10.2009 17:27 # 0
guest 15.10.2009 21:22 # +1
ViewState - известный словарь (не дженериковый), хранит данные любых типов. А тут народ проверяет не на null, а на is! Т.е. что, в словаре под данным ключом может быть обжект другого типа?! Это способ 1) сделать помойку, и 2) дольше не найти косяк, если под тем же ключом где-то влепят обжект другого типа. Ну, создаётся каждый раз - и создаётся. Упасть-то не упало :)
Более пральный вариант вроде такого:
idPlansList = (List<int>)ViewState["idPlansList"] ?? new List<int>();
guest 18.10.2009 13:18 # −1
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>();
guest 18.10.2009 15:55 # +1
Откуда такой страх перед исключениями в нужных ситуациях?
guest 19.10.2009 08:35 # 0
guest 19.10.2009 22:41 # 0
Азы объяснять? :) Если в словаре ничего нет (null), он приведётся к null. Если есть List<int>, приведётся к нему. Если не пусто и не List<int>, упадёт, т.к. прокосячили. Если же автор ТАК И ЗАДУМЫВАЛ хранить в словаре значения, то - в Индии сейчас тепло.
guest 21.10.2009 09:19 # 0
guest 18.10.2009 15:55 # +1
Откуда такой страх перед исключениями в нужных ситуациях?
guest 18.10.2009 15:56 # 0
guest 15.10.2009 21:24 # +1