Поделиться через


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

Правила использования поддерживают надлежащее использование .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" никогда не будет вызываться.
CA2263: предпочитать универсальную перегрузку, если тип известен Использование универсальной перегрузки предпочтительнее передавать System.Type аргумент при известном типе, так как они повышают более чистый и более типобезопасный код с улучшенными проверка времени компиляции.