2008-11-03 6 views
1

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

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

ответ

5

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

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

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

Так снова; это сводится к вашей уверенности в модульных тестах.

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

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

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

Вот тривиальный пример «вар» в качестве отключающего изменения:

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

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

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

1

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

0

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

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

EDIT: На самом деле я ошибаюсь в отношении вар, не нарушающего вещи, так что да, мой оригинальный совет стоит. Если он не сломался ...

+0

Фактически, переключение на var может быть изменением; см. мой ответ, почему – 2008-11-03 14:25:17