Рекомендации по написанию кода на C#
РАЗЛИЧНЫЕ РЕКОМЕНДАЦИИ ПО ПРОЕКТИРОВАНИЮ
AV1200 Генерируйте исключение вместо возвращения статусного сообщения
AV1205 Генерируйте настолько специфичное исключение, насколько это возможно
AV1215 Обрабатывайте исключения в асинхронном коде должным образом
AV1225 Для обработки каждого события используйте защищенный виртуальный метод
AV1235 Не отправляйте null в качестве аргумента при вызове события
AV1250 Вычисляйте результат LINQ-запроса до того, как вернуть его
AV1240 Используйте общие ограничения, если возможно
AV1230 Использование событий уведомления об изменении свойств
AV1220 Всегда проверяйте делегат обработчика события на null
AV1210 Не игнорируйте ошибку путем обработки общих исключений
AV1202 Обеспечьте полное и осмысленное сообщение об исключении
Главная тема
AV1501 Создавайте все члены класса private, а типы internal по умолчанию
AV1500 В методе не должно быть более 7 объявлений
AV1505 Наименование сборки в её названии должно идти после наименования её пространства имён
AV1506 Называйте файлы с исходным кодом в соответствии с тем типом данных, который он содержит
AV1507 Ограничивайте содержимое файла с исходным кодом одним типом данных
AV1515 Не используйте «магические» числа
AV1510 Используйте using вместо указания полной ссылки на тип из другого пространства имен
AV1508 Наименование файла с исходным кодом, который содержит частичный тип данных, должно отражать назначение этой части
AV1520 Используйте var только тогда, когда тип переменной очевиден
AV1521 Объявляйте и инициализируйте переменные как можно позже
AV1522 Присваивайте значение каждой переменной в отдельном объявлении
AV1561Не допускайте, чтобы метод или конструктор принимал более трех параметров
AV1523 Предпочитайте инициализаторы объектов и коллекций раздельной установке свойств и раздельному добавлению новых объектов в коллекцию
AV1525 Не производите явного сравнения с trueили false
AV1530 Не изменяйте переменную цикла for или foreach внутри тела цикла
AV1502 Избегайте двойного отрицания
AV1553 Используйте необязательные аргументы только для того, чтобы заменять перегрузки
AV1532 Избегайте вложенных циклов
AV1535 Всегда используйте конструкции if, else, while, for, foreach и case с фигурными скобками
AV1536 Всегда используйте блок default в конце конструкции switch/case
AV1537 Заканчивайте каждый блок if-else-if объявлением else
AV1575 Не оставляйте закомментированные участки кода
AV1540 Старайтесь избегать нескольких объявлений return
AV1545 Не используйте блок if-else вместо простого (условного) присваивания
AV1547 Инкапсулируйте комплексное выражение в методе или свойстве
AV1551 Вызывайте наиболее перегруженный метод из других перегрузок
AV1568 Не используйте параметры в качестве временных переменных
AV1570 Всегда проверяйте результат, возвращаемый оператором as
AV1562 Не используйте ref и out в параметрах
AV1555 Избегайте использования именованных аргументов
AV1564 Не создавайте методы, которые принимают в качестве параметра логическое значение
РЕКОМЕНДАЦИИ ПО ИМЕНОВАНИЮ
AV1710 Не повторяйте имя класса или перечисления в названиях их членов
AV1711 Давайте элементам такие названия, которые схожи с элементами связанных с ними классов .NET Framework
AV1709 При именовании параметров универсальных типов используйте описательные имена
AV1708 Именуйте типы, используя словосочетания из существительных или прилагательных
AV1705 Не используйте префиксы в названиях полей
AV1706 Не используйте аббревиатуры
AV1702 Для каждого элемента языка используйте соответствующую нотацию
AV1707 Называйте члены класса, параметры и переменные в соответствии с их назначением, а не типом
AV1704 Не включайте числа в наименования переменных, параметров и типов
AV1701Используйте американский английский язык
AV1738 Используйте приставку On в названии обработчика события
AV1712 Избегайте коротких имен или имен, которые можно спутать с другими наименованиями
AV1720 Именуйте методы, используя связку глагол-объект
AV1737 Используйте –ing и –ed для событий, которые должны случиться перед и после какого-либо другого события
AV1735 Используйте глагол или словосочетание с глаголом в названии события
AV1755 Добфавляйте суффиксы Async или TaskAsync к названиям асинхронных методов
AV1715 Не ленитесь давать подходящие названия свойствам
AV1725 В названиях пространств имен используйте имена собственные, названия модулей (слоев), глаголы и слова, описывающие особенности данного пространства имен
AV1739 Используйте символ подчеркивание для параметров лямбда-выражений, которые не имеют значения
AV1745 Именуйте группы методов расширений в классе с использованием суффикса Extentions
РЕКОМЕНДАЦИИ ПО ПОВЫШЕНИЮ ПРОИЗВОДИТЕЛЬНОСТИ
AV1825 Используйте Task.Run для высокоинтенсивных задач
AV1820 Используйте async только для долговременных и низкоинтенсивных задач
AV1800 Используйте Any(), чтобы проверить IEnbmerable<T> на пустоту
AV1830 Избегайте использования await/async с Task.Wait
AV1835 Опасайтесь взаимной блокировки async/aфwait в однопоточном окружении
РЕКОМЕНДАЦИИ ПО ПРОЕКТИРОВАНИЮ ЧЛЕНОВ КЛАССА
AV1105 Используйте метод вместо свойства
AV1115 Метод или свойство должны иметь единственное предназначение
AV1135 Свойства, методы или аргументы, которые представляют из себя строку или коллекцию, никогда не должны быть равны null
AV1140 Используйте типы, характерные для вашей предметной области, вместо примитивов
AV1137 Определяйте параметры настолько специфичными, насколько это возможно
AV1125 Не выставляйте объекты, описывающие состояние, посредством статических членов
AV1110 Не используйте взаимоисключающие свойства
AV1100 Свойства класса должны иметь возможность быть установленными в любом порядке
ПО ПРОЕКТИРОВАНИЮ КЛАССОВ
AV1000 Класс или интерфейс должны иметь единственное предназначение
AV1003 Интерфейс должен быть небольшим и должен быть сфокусирован на решении одной задачи
AV1008 Избегайте статических классов
AV1014 Объект должен обладать ограниченным знанием о других объектах, которые не имеют непосредственного отношения к этому объекту
AV1020 Избегайте двунаправленной зависимости
AV1010 Не скрывайте унаследованные элементы за ключевым словом new
AV1025 Классы должны иметь состояние и поведение
AV1011 Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом
AV1013 Не ссылайтесь на производные классы из базового класса
AV1005 Используйте интерфейс для реализации слабой связанности между классами
AV1004 Используйте интерфейс, а не базовый класс, чтобы поддерживать несколько реализаций
AV1001 Создавайте новые экземпляры класса с помощью конструктора таким образом, чтобы в результате вы получили полностью готовый к использованию объект
РЕКОМЕНДАЦИИ ПО ОФОРМЛЕНИЮ
AV2407 Будьте осторожны с использованием ключевого слова #region
AV2406 Располагайте члены класса в строго определенном порядке
AV2402 Располагайте и группируйте пространства имен в соответствии с названием компании
AV2400 Используйте общие правила оформления
РЕКОМЕНДАЦИИ ПО СОЗДАНИЮ ДОКУМЕНТАЦИИ
AV2305 Документируйте все public, protected и internal типы и члены
AV2301 Пишите комментарии и документацию на американском английском
AV2307 Используйте MSDN стиль написания документации
AV2306 При написании XML документации помните о другом разработчике
AV2318 Не используйте комментарии для отслеживания работы, которая должна быть сделана позднее
AV2316 Пишите комментарии только для того, чтобы объяснить комплексные решения и алгоритмы
AV2310 Избегайте инлайновых комментариев
РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ ФРЕЙМВОРКА
AV2201 Используйте псевдонимы типов C# вместо типов из пространства имен System
AV2215 Тщательно заполняйте атрибуты в файле AssemblyInfo.cs
AV2210 Осуществляйте сборку с наивысшим уровнем предупреждений
AV2207 Не оставляйте в коде строки, которые должны бфыть изменены во время развертывания приложения
AV2205 Тщательно задавайте названия свойств, переменных или полей, ссылающихся на локализованные ресурсы
AV2235 Старайтесь использовать async/await вместо Task
AV2230 Используйте ключевое слово dynamic только при работе с объектами этого типа
AV2220 Избегайте использования LINQ для простых выражений
AV2221 Используйте лямбда-выражения вместо делегатов