Как изменился ваш документ о стандартах кодирования после обновления до C # 3.0 / VS2008?
-
19-08-2019 - |
Вопрос
Мы находимся в процессе обновления наших проектов с 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 экономно только с анонимными типами.
- Поощряйте использование лямбда-выражений над делегатами.
- Используйте методы расширения только в том случае, если у вас нет контроля над исходным кодом