Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Правила использования поддерживают надлежащее использование .NET.
В этом разделе
| Правило | Description |
|---|---|
| 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. |
| CA2216: высвобождаемые типы должны объявлять метод завершения | Тип, который реализует System.IDisposable и имеет поля, предусматривающие использование неуправляемых ресурсов, не реализует метод завершения, как описано в Object.Finalize. |
| CA2217: не следует помечать перечисления атрибутом FlagsAttribute | Видимое извне перечисление помечено атрибутом FlagsAttribute и имеет одно или несколько значений, которые не являются степенью двух или сочетанием других определенных значений в перечислении. |
| CA2218: переопределяйте GetHashCode при переопределении Equals | Открытый тип переопределяет System.Object.Equals, но не System.Object.GetHashCode. |
| CA2219: не создавайте исключения в предложениях исключений | Если исключение создается в предложении finally или fault, новое исключение скрывает активное исключение. При возникновении исключения в предложении фильтра среда выполнения автоматически перехватывает исключение. Из-за этого становится трудно обнаружить и отладить изначальную ошибку. |
| CA2224: переопределяйте равенство при перегрузке оператора равенства | Открытый тип реализует оператор равенства, но не переопределяет 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 что значение указано правильно. Это значение измеряется в килобайтах. |
| CA2264: не передайте ненулевое значение в ArgumentNullException.ThrowIfNull. | АргументNullException.ThrowIfNull вызывается, когда переданный аргумент имеет значение NULL. Некоторые конструкции, такие как структуры, не допускающие значение NULL, и "nameof()" и "new" выражения, как известно, никогда не имеют значения NULL, поэтому "ArgumentNullException.ThrowIfNull" никогда не будет вызываться. |
CA2265: не сравнивайте или Span<T> не сравнивайте nulldefault |
Сравнение диапазона с null или default может не делать то, что вы намеревались.
default
null и литерал неявно преобразуются в Span<T>.Empty. |
| CA2263: предпочитать универсальную перегрузку, если тип известен | Использование универсальной перегрузки предпочтительнее передавать System.Type аргумент при известном типе, так как они повышают более чистый и более типобезопасный код с улучшенными проверками во время компиляции. |
Сотрудничайте с нами на GitHub
Исходный код этого содержимого можно найти на GitHub, где вы также можете создавать и просматривать проблемы и запросы на вытягивание. Для получения дополнительной информации см. наше руководство для авторов.