Рекомендация по написанию кода C#

РЕКОМЕНДАЦИИ ПО УЛУЧШЕНИЮ СОПРОВОЖДАЕМОСТИ КОДА

^

AV1500В методе не должно быть более 7 объявлений

AV1501 Создавайте все члены класса private, а типы internal по умолчанию

AV1506 Называйте файлы с исходным кодом в соответствии с тем типом данных, который он содержит

AV1507Ограничивайте содержимое файла с исходным кодом одним типом данных

AV1505 Наименование сборки в её названии должно идти после наименования её пространства имён

AV1508 Наименование файла с исходным кодом, который содержит частичный тип данных, должно отражать назначение этой части

AV1510 Используйте using вместо указания полной ссылки на тип из другого пространства имен

AV1515Не используйте «магические» числа

AV1521 Объявляйте и инициализируйте переменные как можно позже

AV1520 Используйте var только тогда, когда тип переменной очевиден

AV1522Присваивайте значение каждой переменной в отдельном объявлении

AV1530 Не изменяйте переменную цикла for или foreach внутри тела цикла

AV1525 Не производите явного сравнения с trueили false

AV1553Используйте необязательные аргументы только для того, чтобы заменять перегрузки

AV1535 Всегда используйте конструкции if, else, while, for, foreach и case с фигурными скобками

AV1545 Не используйте блок if-else вместо простого (условного) присваивания

AV1561Не допускайте, чтобы метод или конструктор принимал более трех параметров

AV1568 Не используйте параметры в качестве временных переменных

AV1555 Избегайте использования именованных аргументов

AV1540 Старайтесь избегать нескольких объявлений return

AV1564 Не создавайте методы, которые принимают в качестве параметра логическое значение

AV1502 Избегайте двойного отрицания

AV1523 Предпочитайте инициализаторы объектов и коллекций раздельной установке свойств и раздельному добавлению новых объектов в коллекцию

AV1532 Избегайте вложенных циклов

AV1537 Заканчивайте каждый блок if-else-if объявлением else

РЕКОМЕНДАЦИИ ПО ИМЕНОВАНИЮ

^

AV1710Не повторяйте имя класса или перечисления в названиях их членов

AV1711 Давайте элементам такие названия, которые схожи с элементами связанных с ними классов .NET Framework

AV1708 Именуйте типы, используя словосочетания из существительных или прилагательных

AV1701 Используйте американский английский язык

AV1702 Для каждого элемента языка используйте соответствующую нотацию

AV1705 Не используйте префиксы в названиях полей

AV1710 Не повторяйте имя класса или перечисления в названиях их членов

AV1709 При именовании параметров универсальных типов используйте описательные имена

AV1704 Не включайте числа в наименования переменных, параметров и типов

AV1712 Избегайте коротких имен или имен, которые можно спутать с другими наименованиями

AV1715 Не ленитесь давать подходящие названия свойствам

AV1725 В названиях пространств имен используйте имена собственные, названия модулей (слоев), глаголы и слова, описывающие особенности данного пространства имен

AV1745 Именуйте группы методов расширений в классе с использованием суффикса Extentions

AV1709 При именовании параметров универсальных типов используйте описательные имена

РЕКОМЕНДАЦИИ ПО ПОВЫШЕНИЮ ПРОИЗВОДИТЕЛЬНОСТИ

^

AV1800 Используйте Any(), чтобы проверить IEnbmerable<T> на пустоту

AV1820 Используйте async только для долговременных и низкоинтенсивных задач

AV1825 Используйте Task.Run для высокоинтенсивных задач

AV1835 Опасайтесь взаимной блокировки async/await в однопоточном окружении

AV1830 Избегайте использования await/async с Task.Wait

РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ ФРЕЙМВОРКА

AV2201 Используйте псевдонимы типов C# вместо типов из пространства имен System

AV2205 Тщательно задавайте названия свойств, переменных или полей, ссылающихся на локализованные ресурсы

AV2207 Не оставляйте в коде строки, которые должны быть изменены во время развертывания приложения

AV2210 Осуществляйте сборку с наивысшим уровнем предупреждений

AV2215 Тщательно заполняйте атрибуты в файле AssemblyInfo.cs

AV2220 Избегайте использования LINQ для простых выражений

AV2221 Используйте лямбда-выражения вместо делегатов

AV2230 Используйте ключевое слово dynamic только при работе с объектами этого типа

AV2235 Старайтесь использовать async/await вместо Task

ПО ПРОЕКТИРОВАНИЮ КЛАССОВ

AV1000Класс или интерфейс должны иметь единственное предназначение

AV1001 Создавайте новые экземпляры класса с помощью конструктора таким образом, чтобы в результате вы получили полностью готовый к использованию объект

AV1003 Интерфейс должен быть небольшим и должен быть сфокусирован на решении одной задачи

AV1004 Используйте интерфейс, а не базовый класс, чтобы поддерживать несколько реализаций

AV1005 Используйте интерфейс для реализации слабой связанности между классами

AV1010 Не скрывайте унаследованные элементы за ключевым словом new

AV1011Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом

AV1008 Избегайте статических классов

AV1013 Не ссылайтесь на производные классы из базового класса

AV1014 Объект должен обладать ограниченным знанием о других объектах, которые не имеют непосредственного отношения к этому объекту

AV1020 Избегайте двунаправленной зависимости

AV1025 Классы должны иметь состояние и поведение

РЕКОМЕНДАЦИИ ПО СОЗДАНИЮ ДОКУМЕНТАЦИИ

^

AV2301Пишите комментарии и документацию на американском английском

AV2306 При написании XML документации помните о другом разработчике

AV2305 Документируйте все public, protected и internal типы и члены

AV2307 Используйте MSDN стиль написания документации

AV2310 Избегайте инлайновых комментариев

AV2316 Пишите комментарии только для того, чтобы объяснить комплексные решения и алгоритмы

AV2318 Не используйте комментарии для отслеживания работы, которая должна быть сделана позднее

РЕКОМЕНДАЦИИ ПО ОФОРМЛЕНИЮ

AV2400 Используйте общие правила оформления

AV2402 Располагайте и группируйте пространства имен в соответствии с названием компании

AV2406 Располагайте члены класса в строго определенном порядке

AV2407 Будьте осторожны с использованием ключевого слова #region

РЕКОМЕНДАЦИИ ПО ПРОЕКТИРОВАНИЮ ЧЛЕНОВ КЛАССА

AV1100 Свойства класса должны иметь возможность быть установленными в любом порядке

AV1105 Используйте метод вместо свойства

AV1110 Не используйте взаимоисключающие свойства

AV1115 Метод или свойство должны иметь единственное предназначение

AV1125 Не выставляйте объекты, описывающие состояние, посредством статических членов

AV1135 Свойства, методы или аргументы, которые представляют из себя строку или коллекцию, никогда не должны быть равны null

AV1137 Определяйте параметры настолько специфичными, насколько это возможно

РЕКОМЕНДАЦИИ ПО ПРОЕКТИРОВАНИЮ

AV1202 Обеспечьте полное и осмысленное сообщение об исключении

AV1210 Не игнорируйте ошибку путем обработки общих исключений

AV1215 Обрабатывайте исключения в асинхронном коде должным образом

AV1205 Генерируйте настолько специфичное исключение, насколько это возможно

AV1200Генерируйте исключение вместо возвращения статусного сообщения

AV1220 Всегда проверяйте делегат обработчика события на null

AV1225 Для обработки каждого события используйте защищенный виртуальный метод
тема

AV1230 Использование событий уведомления об изменении свойств

AV1235 Не отправляйте null в качестве аргумента при вызове события

AV1240 Используйте общие ограничения, если возможно
а