1. C# / Говнокод #4733

    +110

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    protected static string CreateSubIndexName(string prefix, int index) {
                return String.Format(CultureInfo.InvariantCulture, "{0}[{1}]", prefix, index);
            }
    
            protected static string CreateSubIndexName(string prefix, string index) {
                return String.Format(CultureInfo.InvariantCulture, "{0}[{1}]", prefix, index);
            }

    Из исходников ASP.NET MVC 2. Класс DefaultModelBinder.
    Рядышком друг за другом два метода с совершенно одинаковым содержимым.
    Наш девиз: дублирование кода, умещающегося в одну строчку, за дублирование не считается.

    Запостил: Pauchok-Anaynckiy, 24 Ноября 2010

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

    • так небось автогенерилка поработала, это же .net)
      Ответить
    • И что же, оно съедает две функции с одинаковыми сигнатурами ?
      Ответить
      • Там разные сигнатуры, приглядитесь.
        Ответить
        • показать все, что скрытоах, да ... второй аргумент. Ну так это получается разные функции и разное содержимое. Т.к. типы разные.
          Поэтому и появились шаблоны в С++. Не знаю как с этим делом в шарпах.
          Ответить
          • отлично с этим делом в шарпах.
            Беда только в том, что параметризовать можно только ссылочным типом. Если указать примитив (int) то он автобоксится в объект (тоесть в куче создатся с объект, в него положится значение int, и вместо примитива будет ссылка на этот объект). Видимо в целях экономии памяти они и сделали две функции
            Ответить
            • int когда передается в String.Format он все равно ведь боксится. на боксинге тут экономии не получится
              Ответить
            • оба-на! как это только ссылочным типом можно параметризовать?
              не генериках специально даже констрейнт struct предусмотрен, чтобы можно было только значимыми типами параметризовывать
              Ответить
      • хихи
        найдите отличие
        Ответить
    • в 1ой перегрузке в теле должен быть index.ToString() (работает то и без него, но будет ненужный боксинг)
      Ответить
      • вообще по-хорошему, если чисто делать, то должен быть только один главный метод, содержащий непосредственно код форматирования, а остальные перегрузки чтобы работали только через него.

        в этом куске главным будет метод со строковой перегрузкой, а инт-овая перегрузка соответственно должна его дергать:
        return CreateSubIndexName(prefix, index.ToString());

        вот при таком подходе я пойду на уговоры не разбрызгиваться своими фекалиями ))))))))
        Ответить

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