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

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

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

Ответы [ 5 ]

7 голосов
/ 04 декабря 2008

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

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

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

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

2 голосов
/ 04 декабря 2008

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

1 голос
/ 04 декабря 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(...);
1 голос
/ 04 декабря 2008

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

0 голосов
/ 04 декабря 2008

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

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