Правила использования

Правила использования поддерживают надлежащее использование .NET.

В этом разделе

Правило Описание
CA1801: проверьте неиспользуемые параметры Сигнатура метода включает параметр, не использующийся в основной части метода.
CA1816: вызов GC.SuppressFinalize должен осуществляться правильно Метод, который является реализацией Dispose, не вызывает GC.SuppressFinalize; или метод, который не является реализацией Dispose, вызывает GC.SuppressFinalize; или метод вызывает GC.SuppressFinalize и передает нечто, отличное от this (Me в Visual Basic).
CA2200: следует повторно вызывать исключение для сохранения сведений о стеке Исключение повторно выбрасывается, и это исключение явно указывается в операторе throw. Если исключение повторно выбрасывается путем указания этого исключения в операторе throw, список вызовов методов между исходным методом, вызвавшим это исключение, и текущим методом теряется.
CA2201: не вызывайте зарезервированные типы исключений Из-за этого становится трудно обнаружить и отладить изначальную ошибку.
CA2207: инициализируйте статические поля типа значений встроенными средствами Тип значения объявляет явный статический конструктор. Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор.
CA2208: Правильно создавайте экземпляры исключений для аргументов Вызывается конструктор по умолчанию (без параметров), принадлежащий к типу исключения ArgumentException или унаследованный от него, или неправильный аргумент строки передается параметризованному конструктору, принадлежащему к типу исключения ArgumentException или унаследованному от него.
CA2211: неконстантные поля должны быть скрыты Статические поля, не являющиеся константами или полями только для чтения, не являются потокобезопасными. Доступ к подобным полям должен тщательно контролироваться, и для синхронизации доступа к такому объекту класса требуются дополнительные методы программирования.
CA2213: Освобождаемые поля должны освобождаться Тип, реализующий System.IDisposable, объявляет поля, имеющие типы, которые также реализуют IDisposable. Метод Dispose поля не вызывается методом Dispose объявляющего типа.
CA2214: Не вызывайте переопределяемые методы в конструкторах Когда конструктор вызывает виртуальный метод, возможна ситуация, при которой конструктор экземпляра, вызывающего этот метод, ещё не выполнен.
CA2215: метод Dispose должен вызывать метод Dispose базового класса Если тип наследует от освобождаемого типа, он должен вызывать метод Dispose базового типа из собственного метода Dispose.
CA2216: высвобождаемые типы должны объявлять метод завершения Тип, который реализует System.IDisposable и имеет поля, предусматривающие использование неуправляемых ресурсов, не реализует метод завершения, как описано в Object.Finalize.
CA2217: Не следует помечать перечисления атрибутом FlagsAttribute Перечисление, видимое извне, помечено с помощью FlagsAttribute, и оно имеет одно или несколько значений, которые не являются степенями двойки или комбинацией других значений, определённых в этом перечислении.
CA2218: переопределяйте GetHashCode при переопределении Equals Общедоступный тип переопределяет System.Object.Equals, но не переопределяет System.Object.GetHashCode.
CA2219: не создавайте исключения в предложениях исключений Если исключение создается в предложении finally или fault, новое исключение скрывает активное исключение. При возникновении исключения в предложении фильтра среда выполнения автоматически перехватывает исключение. Из-за этого становится трудно обнаружить и отладить изначальную ошибку.
CA2224: переопределяйте Equals при перегрузке оператора == Открытый тип реализует оператор равенства, но не переопределяет System.Object.Equals.
CA2225: Перегрузки оператора имеют именованные альтернативы Обнаружена перегрузка оператора, однако не найден ожидаемый именованный альтернативный метод. Именованный альтернативный член предоставляет те же функции, что и основной оператор, и его могут использовать разработчики, которые программируют на языках, не поддерживающих перегрузку операторов.
CA2226: перегрузки операторов должны быть симметричны Тип реализует оператор равенства или неравенства, но не реализует противоположный оператор.
CA2227: свойства коллекции должны иметь параметр "только для чтения" Свойство коллекции, допускающее запись, позволяет пользователю заменять одну коллекцию другой. Свойство только для чтения предотвращает замену коллекции, но по-прежнему позволяет задавать отдельные её элементы.
CA2229: применяйте конструкторы сериализации Чтобы устранить нарушение этого правила, реализуйте конструктор сериализации. Для закрытого класса сделайте конструктор закрытым; в противном случае сделайте его защищённым.
CA2231: Перегрузка оператора равенства при переопределении ValueType.Equals Тип значения переопределяет Object.Equals, но не реализует оператор равенства.
CA2234: передавайте объекты System.Uri вместо строк Вызывается метод, у которого есть строковый параметр, имя которого содержит "uri", "URI", "urn", "URN", "url" или "URL". Объявляющий тип метода содержит соответствующую перегрузку метода, которая имеет параметр System.Uri.
CA2235: помечайте все несериализуемые поля Экземпляр поля несериализуемого типа объявлен в сериализуемом типе.
CA2237: пометьте типы ISerializable атрибутом SerializableAttribute Чтобы среда CLR распознавала тип как сериализуемый, он должен быть помечен атрибутом SerializableAttribute, даже если тип использует пользовательскую процедуру сериализации посредством реализации интерфейса ISerializable.
CA2241: предоставьте правильные аргументы методам форматирования Аргумент формата, переданный методу String.Format, не содержит элемент форматирования, соответствующий каждому аргументу объекта, или наоборот.
CA2242: Правильно проверяйте на NaN Это выражение проверяет значение на соответствие Single.Nan или Double.Nan. Используйте Single.IsNan(Single) или Double.IsNan(Double) для проверки значения.
CA2243: строковые литералы атрибутов должны правильно анализироваться Не удается правильно выполнить синтаксический анализ параметра строкового литерала атрибута для URL-адреса, идентификатора GUID или версии.
CA2244: не повторяйте инициализации индексированного элемента Инициализатор объектов имеет несколько инициализаторов индексированных элементов с одинаковым индексом константы. Все инициализаторы, кроме последнего, являются избыточными.
CA2245: не присваивайте свойству себе Свойство было случайно назначено самому себе.
CA2246: Не присваивайте значение символу и его члену в одном и том же операторе Не рекомендуется назначать символ и его член, то есть поле или свойство в одном операторе. Неясно, предназначался ли доступ к члену для использования старого значения символа до назначения или нового значения из назначения в этом операторе.
CA2247: Аргумент, переданный конструктору TaskCompletionSource, должен иметь тип перечисления TaskCreationOptions, а не TaskContinuationOptions TaskCompletionSource имеет конструкторы, принимающие TaskCreationOptions, которые управляют базовой задачей, и конструкторы, которые принимают состояние объекта, сохраненное в задаче. Если по ошибке передать TaskContinuationOptions вместо TaskCreationOptions, вызов интерпретирует эти параметры как объект состояния.
CA2248: укажите правильный аргумент enum для Enum.HasFlag Тип перечисления, переданный в качестве аргумента при вызове метода HasFlag, отличается от типа перечисления, для которого вызывается этот метод.
CA2249: рекомендуется использовать String.Contains вместо String.IndexOf Вызовы string.IndexOf, результат которых используется для проверки наличия или отсутствия подстроки, можно заменить на string.Contains.
CA2250: Использовать ThrowIfCancellationRequested ThrowIfCancellationRequested автоматически проверяет, был ли токен отменён, и, если это так, вызывает исключение OperationCanceledException.
CA2251: использование String.Equals вместо String.Compare Использование String.Equals, скорее всего, будет более понятным и быстрым, чем сравнение результата String.Compare с нулем.
CA2252: согласие на использование предварительной версии функций Включите предварительные возможности, прежде чем использовать API предварительной версии.
CA2253: именованные заполнители не должны быть числовыми значениями Именованные заполнители в шаблоне сообщения ведения журнала не должны состоять только из числовых символов.
CA2254: шаблон должен быть статическим выражением Шаблон сообщения журнала не должен меняться между вызовами.
CA2255. Атрибут ModuleInitializer не должен использоваться в библиотеках Инициализаторы модулей предназначены для использования кодом приложения, чтобы компоненты приложения были инициализированы до того, как начнется выполнение кода приложения.
CA2256: Все члены, объявленные в родительских интерфейсах, должны иметь реализацию в интерфейсе, помеченном атрибутом DynamicInterfaceCastableImplementation Типы, помеченные атрибутом DynamicInterfaceCastableImplementationAttribute, выступают в качестве реализации интерфейса для типа, реализующего тип IDynamicInterfaceCastable. В результате он должен реализовать все элементы, определённые в унаследованных интерфейсах, поскольку тип, реализующий IDynamicInterfaceCastable, иначе не будет их реализовывать.
CA2257: элементы, определенные в интерфейсе с dynamicInterfaceCastableImplementationAttribute, должны быть статическими. Поскольку тип, реализующий IDynamicInterfaceCastable, может не реализовать динамический интерфейс в метаданных, вызовы члена инстанции интерфейса, который не является явно реализуемым для этого типа, вероятно, завершатся ошибкой во время выполнения. Пометьте новые члены static интерфейса, чтобы избежать ошибок среды выполнения.
CA2258: предоставление интерфейса DynamicInterfaceCastableImplementation в Visual Basic не поддерживается Чтобы интерфейс, помеченный атрибутом DynamicInterfaceCastableImplementationAttribute, был функциональным, требуется возможность «Члены интерфейса по умолчанию», которая не поддерживается в Visual Basic.
CA2259: Убедитесь, что ThreadStatic используется только со статическими полями ThreadStaticAttribute влияет только на static поля (Shared в Visual Basic). При применении к полям экземпляра атрибут не влияет на поведение.
CA2260: правильно реализуйте универсальные математические интерфейсы Обобщённые математические интерфейсы требуют использования самого производного типа в качестве саморекурсивного параметра типа.
CA2261: не используйте ConfigureAwaitOptions.SuppressThrowing вместе с Task<TResult> Параметр ConfigureAwaitOptions.SuppressThrowing не поддерживается универсальным Task<TResult>, так как это может привести к возврату недопустимого TResult.
CA2262: задать MaxResponseHeadersLength правильно Убедитесь, что значение MaxResponseHeadersLength введено правильно. Это значение измеряется в килобайтах.
CA2263: Предпочитать универсальную перегрузку, если тип известен Использовать обобщённую перегрузку предпочтительнее, чем передавать аргумент System.Type, когда тип известен, поскольку это позволяет писать более чистый и типобезопасный код и улучшает проверки на этапе компиляции.
CA2264: не передайте ненулевое значение в ArgumentNullException.ThrowIfNull. `ArgumentNullException.ThrowIfNull` выдает исключение, если переданный аргумент равен `null`. Некоторые конструкции, такие как структуры, не допускающие значения null, а также выражения `nameof()` и `new`, заведомо никогда не бывают равны null, поэтому `ArgumentNullException.ThrowIfNull` никогда не выбросит исключение.
CA2265: не сравнивайте Span<T> с null или default Сравнение диапазона с null или default может не делать то, что вы намеревались. default и литерал null неявно преобразуются в Span<T>.Empty.
CA2266: файловая точка входа программы должна начинаться с #! Если программа состоит из нескольких файлов, файл с точкой входа должен начинаться со строки shebang (#!), чтобы его можно было чётко отличить от других подключаемых файлов.