Ретро новые возможности языка C # (или любой другой язык) - PullRequest
1 голос
/ 03 ноября 2008

При работе с моей кодовой базой .Net 2.0 ReSharper постоянно рекомендует применять новейшие функции языка c # 3.0, особенно; преобразовать простые свойства в автоматически реализуемые свойства или объявить локальные переменные как var. Среди прочих.

Когда появляется новая языковая функция, возвращаетесь ли вы и неукоснительно ли применяете ее в существующей кодовой базе или оставляете код в том виде, в котором он был изначально написан, признавая, что если новый код написан с использованием новых языковых функций, в вашем коде будут несоответствия?

Ответы [ 4 ]

5 голосов
/ 03 ноября 2008

Если это не сломано, не исправляйте это. Конечно, если у вас есть уверенность в своих модульных тестах, вы можете испытать их, но вам не следует менять код произвольно «просто потому что».

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

Изменение на «var» может фактически дать вам другой (более конкретный) тип, который может вызвать выбор другой перегрузки метода и т. Д.

Итак, еще раз; все зависит от вашей уверенности в юнит-тестах.

Другие соображения:

  • Остальная команда еще понимает новый синтаксис?
  • требует ли ваш проект поддержки C # 2.0 (например, некоторые проекты с открытым исходным кодом могут захотеть сохранить совместимость с C # 2.0).

Если ни один из них не является проблемой, вы должны быть в порядке, чтобы использовать новые функции в новом коде ... просто будьте немного осторожными, прежде чем нажать "обновить все" на старом коде ...

Вот тривиальный пример "var" как критического изменения:

    static void Main() {
        using (TextReader reader = File.OpenText("foo.bar")) { // [HERE]
            Write(reader);
        }
    }
    static void Write(TextReader reader) {
        Console.Write(reader.ReadToEnd());
    }
    static void Write(StreamReader reader) {
        throw new NotImplementedException();
    }

Теперь переключитесь на var reader в строке, помеченной [HERE] ...

2 голосов
/ 03 ноября 2008

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

C # 3 строит на C # 2 и оба вполне совместимы. Следовательно, каждое обновление должно быть отражено.

1 голос
/ 03 ноября 2008

Я оставляю это, пока я не изменяю эту линию (или часто только линии около этого). Затем я обновляю. (Иногда я обновляю весь класс или файл, когда меняю один из них)

0 голосов
/ 03 ноября 2008

Я оставляю это. Помимо того, что это было бы много работы, есть также проблема в том, действительно ли код такой же или есть побочные эффекты новой функции.

В конкретном случае с var компилятор все равно вводит правильный тип во время компиляции, так что в действительности нет никакой выгоды.

РЕДАКТИРОВАТЬ: На самом деле я ошибаюсь из-за того, что вар не ломать вещи, так что да, мой первоначальный совет остается в силе. Если это не сломано ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...