Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Правила использования поддерживают надлежащее использование .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 (#!), чтобы его можно было чётко отличить от других подключаемых файлов. |
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.