Си диез / Говнокод #1979 Ссылка на оригинал

0

  1. 1
idPlansList = ViewState["idPlansList"] is List<int> ? (List<int>)ViewState["idPlansList"] : new List<int>();

Запостил: ilya_lysenko ilya_lysenko, (Updated )

Комментарии (13) RSS

  • не такой уж и говнокод, если idPlansList используется крайне редко , нет смысла его содержать в памяти, ну это в общих чертах я описал принцип, это сравнимо с вызовом статического конструктора при запросе статическому члену класса
    Ответить
  • нифига не похоже на гавнокод, у автора ложные гавноподозрения
    Ответить
  • если бы это содержалось в геттере переменной idPlansList то это говнокод. но в данном случае всё вполне оправдано. инициализация происходит единожды. никаких доп. накладок.
    Ответить
  • А вот это s-code. По одной почему-то не замеченной причине.
    ViewState - известный словарь (не дженериковый), хранит данные любых типов. А тут народ проверяет не на null, а на is! Т.е. что, в словаре под данным ключом может быть обжект другого типа?! Это способ 1) сделать помойку, и 2) дольше не найти косяк, если под тем же ключом где-то влепят обжект другого типа. Ну, создаётся каждый раз - и создаётся. Упасть-то не упало 🙂

    Более пральный вариант вроде такого:
    idPlansList = (List<int>)ViewState["idPlansList"] ?? new List<int>();
    Ответить
    • (List<int>)ViewState["idPlansList"] в случае несоответствия типа выкинет исключение, и до ?? даже дело не дойдет. Наверно имелось в виду
      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>();
      Ответить
      • Имелось в виду именно то, что написано. Если пролюбили тип значения в "словаре помоечного типа" (нетипизированном), пусть исключение вылезет СРАЗУ. Это же элементарно.
        Откуда такой страх перед исключениями в нужных ситуациях?
        Ответить
        • Исключений я не боюсь. но здесь сама конструкция ?? бессмысленна, потому что до второго операнда никогда дело не дойдет, если что-то не так - будет выкидываться исключение. К тому же автору и не нужно исключение, он знает что в таком случае нужно делать. или вы предлагаете всю эту консрукцию обернуть в try-catch и в catch блоке выставлять пустой список?
          Ответить
          • Бессмысленна?? Ну и ну...
            Азы объяснять? 🙂 Если в словаре ничего нет (null), он приведётся к null. Если есть List<int>, приведётся к нему. Если не пусто и не List<int>, упадёт, т.к. прокосячили. Если же автор ТАК И ЗАДУМЫВАЛ хранить в словаре значения, то - в Индии сейчас тепло.
            Ответить
            • Да, тут вы правы. Но мне почему-то подумалось, что он там не на null проверяет, а просто у него по данному ключу может лежать что-то другое нежели List<int> и в таком случае он хочет пустой список. Но в таком случае ССЗБ.
              Ответить
      • Имелось в виду именно то, что написано. Если пролюбили тип значения в "словаре помоечного типа" (нетипизированном), пусть исключение вылезет СРАЗУ. Это же элементарно.
        Откуда такой страх перед исключениями в нужных ситуациях?
        Ответить
  • А, да, и пройтись один совершенно ЛИШНИЙ раз по словарю - никого уже, видимо, не парит.
    Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8