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

StackOverflow https://stackoverflow.com/questions/339952

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Моя личная любимая мозоль - это использование 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(...);

Мои стандарты для новых функций на 2008 год:

  • Используйте var экономно только с анонимными типами.
  • Поощряйте использование лямбда-выражений над делегатами.
  • Используйте методы расширения только в том случае, если у вас нет контроля над исходным кодом
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top