Как изменился ваш документ стандартов кодирования после обновления до C # 3.0 / VS2008?

Мы находимся в процессе обновления наших проектов с C # 2.0 / VS2005 до C # 3.0 / VS2008. В рамках обновления мы добавляем некоторые элементы в наш документ стандартов кодирования.

Как бы вы изменили (или изменили) свой документ стандартов кодирования при обновлении с C # 2.0 / VS2005 до C # 3.0 / VS2008?


person Sir Rippov the Maple    schedule 04.12.2008    source источник


Ответы (5)


Вы можете / должны дать совет по поводу:

  • Когда использовать выражения запроса или точечную нотацию
  • Любые ограничения на использование лямбда-выражений (например, «не изменять захваченные переменные») (конечно, это также может относиться к анонимным методам в C # 2).
  • Когда писать методы расширения
  • Когда использовать неявно типизированные переменные (var)

Последние два вызывают некоторые разногласия, особенно var.

Если ваши соглашения содержат какие-либо рекомендации по дизайну, я бы посоветовал вам также посоветовать программистам рассмотреть возможность использования делегатов для специализации там, где раньше они могли использовать наследование или интерфейсы. Хорошим примером этого является сортировка - проще (и более читабельно) использовать проекцию для определения порядка сортировки, чем писать реализацию IComparer<T>.

person Jon Skeet    schedule 04.12.2008

Обновление совпало с новым проектом, поэтому, когда мы переехали, мы начали использовать такие инструменты, как StyleCop и FxCop, которые изменили наши стандарты кодирования. Кроме того, он также легко обеспечивает их соблюдение: o)

person NikolaiDante    schedule 04.12.2008

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

person johnc    schedule 04.12.2008

Мое личное раздражение - использование var везде, где "возможно".

«Возможный» в настоящее время определяется как один из следующих случаев, в основном в порядке уменьшения аккуратности:

Очевидно, помогает СУХОЙ:

var obj1 = new Something();
var obj2 = (Something)ObscureFunction();
var obj3 = ObscureStuff() as Something;

Охраняемый, мне все равно, пока он компилируется:

var obj4 = ObscureFunction();
foreach(Something s in obj4) { ... }

Сложные обобщения и почти любой результат LINQ:

var obj5 = ctx.GetQuery<Something>()..ToList(..)..GroupJoin(..)...ToLookup(...);
person David Schmitt    schedule 04.12.2008

Мои стандарты новых возможностей на 2008 год:

  • С осторожностью используйте var только с анонимными типами.
  • Поощряйте использование лямбда-выражений вместо делегатов.
  • Используйте методы расширения только тогда, когда у вас нет контроля над исходным кодом
person Community    schedule 04.12.2008