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


Предупреждения использования

Предупреждения использования поддерживают правильное использование платформы .NET Framework.

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

Правило

Описание

CA1801: проверьте неиспользуемые параметры

Сигнатура метода включает параметр, не использующийся в основной части метода.

CA1806: не игнорируйте результаты метода

Создается, но никогда не используется новый объект, либо вызывается метод, который создает и возвращает новую строку, и такая новая строка никогда не используется, либо метод COM или P/Invoke возвращает HRESULT или код ошибки, который никогда не используется.

CA1816: вызов GC.SuppressFinalize должен осуществляться правильно

Метод, являющийся реализацией Dispose, не вызывает GC.SuppressFinalize, либо метод, не являющийся реализацией Dispose, вызывает GC.SuppressFinalize, либо метод вызывает GC.SuppressFinalize и передает что-либо другое (Me в Visual Basic).

CA2200: следует повторно вызывать исключение для сохранения сведений о стеке

В операторе throw повторно создается и явным образом задается исключение. Если исключение повторно создается заданием исключения в операторе throw, список вызовов метода между исходным методом, создавшим исключение, и текущим методом будет утерян.

CA2201: не вызывайте зарезервированные типы исключений

Из-за этого становится трудно обнаружить и отладить изначальную ошибку.

CA2202: не удаляйте объекты несколько раз

Реализация метода содержит пути кода, которые могли стать причиной многократного вызова метода System.IDisposable.Dispose или эквивалентного метода Dispose (например, метода Close() для некоторых типов) для одного и того же объекта.

CA2204: литералы должны иметь правильное написание

Литеральная строка в теле метода содержит одно или несколько слов, не распознаваемых библиотекой системы проверки орфографии Майкрософт.

CA2205: используйте управляемые эквиваленты API Win32

Определен метод вызова неуправляемого кода, при этом в библиотеке классов .NET Framework существует метод с эквивалентной функциональностью.

CA2207: инициализируйте статические поля типа значений встроенными средствами

Тип значения объявляет явный статический конструктор. Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор.

CA2208: правильно создавайте экземпляры аргументов исключений

Вызывается конструктор по умолчанию (без параметров), принадлежащий к типу исключения ArgumentException или унаследованный от него, или неправильный аргумент строки передается параметризованному конструктору, принадлежащему к типу исключения ArgumentException или унаследованному от него.

CA2211: неконстантные поля должны быть скрыты

Для статических полей, которые не являются константными и доступными только для чтения, невозможно обеспечить потокобезопасность. Доступ к подобным полям должен тщательно контролироваться, и для синхронизации доступа к такому объекту класса требуются дополнительные методы программирования.

CA2212: не следует помечать обслуживаемые компоненты атрибутом WebMethod

Метод в типе, унаследованном от System.EnterpriseServices.ServicedComponent, помечен атрибутом System.Web.Services.WebMethodAttribute. Так как атрибут WebMethodAttribute и метод ServicedComponent имеют разное поведение и предъявляют конфликтующие требования к контексту и потоку транзакций, в некоторых сценариях поведение метода будет неправильным.

CA2213: следует высвобождать высвобождаемые поля

Тип, реализующий System.IDisposable, объявляет поля, принадлежащие к типам, которые также реализуют IDisposable. Метод Dispose поля не вызывается методом Dispose объявляющего типа.

CA2214: не вызывайте переопределяемые методы в конструкторах

Когда конструктор вызывает виртуальный метод, возможна ситуация, когда конструктор для экземпляра, вызывающего метод, не выполняется.

CA2215: методы Dispose должны вызывать такие же методы базового класса

Если тип наследуется от удаляемого типа, он должен вызвать метод Dispose базового типа из собственного метода Dispose.

CA2216: высвобождаемые типы должны объявлять метод завершения

Тип, который реализует System.IDisposable и имеет поля, предусматривающие использование неуправляемых ресурсов, не реализует метод завершения, как описано в Object.Finalize.

CA2217: не следует помечать перечисления атрибутом FlagsAttribute

Доступное для внешнего кода перечисление помечено атрибутом FlagsAttribute и имеет одно или несколько значений, которые не являются числа два или сочетанием других определенных значений в перечислении.

CA2218: переопределяйте GetHashCode при переопределении Equals

GetHashCode возвращает значение на основе текущего экземпляра, используемое для алгоритмов хэширования и структур данных, таких как хэш-таблица. Два равных объекта, принадлежащие к одному и тому же типу, должны возвращать один и тот же хэш-код.

CA2219: не создавайте исключения в предложениях исключений

Если исключение создается в предложении finally или fault, новое исключение скрывает активное исключение. Если исключение создается в предложении filter, среда выполнения перехватывает исключение без оповещения. Из-за этого становится трудно обнаружить и отладить изначальную ошибку.

CA2220: методы завершения должны вызывать метод завершения базового класса

Финализация должна распространятся посредством иерархии наследования. Для этого типы должны вызывать свой метод Finalize базового класса из собственного метода Finalize.

CA2221: методы завершения должны быть защищены

В методах завершения должен использоваться модификатор доступа из семейства.

CA2222: не уменьшайте видимость унаследованных членов

Не следует изменять модификатор доступа для унаследованных членов. Если сделать унаследованный член закрытым, то доступ вызывающих объектов к реализации метода базового класса все равно не будет запрещен.

CA2223: члены должны различаться не только возвращаемым типом

Среда CLR позволяет использовать возвращаемые типы для различения совпадающих в остальном членов, однако эта функция не входит в спецификацию CLS и поддерживается не всеми языками программирования .NET.

CA2224: переопределяйте равенство при перегрузке оператора равенства

Открытый тип реализует оператор равенства, но не переопределяет Object.Equals.

CA2225: для перезагрузок оператора существуют дополнения с именами

Обнаружена перегрузка оператора, однако не найден ожидаемый именованный альтернативный метод. Именованный альтернативный член предоставляет те же функции, что и основной оператор, и его могут использовать разработчики, которые программируют на языках, не поддерживающих перегрузку операторов.

CA2226: перегрузки операторов должны быть симметричны

Тип реализует оператор равенства или неравенства, но не реализует противоположный оператор.

CA2227: свойства коллекции должны иметь параметр "только для чтения"

Свойство коллекции, допускающее запись, позволяет пользователю заменять одну коллекцию другой. Свойство только для чтения предотвращает замену коллекции, но по-прежнему допускает установку, настройку отдельных членов.

CA2228: не следует поставлять невыпущенные форматы ресурсов

Файлы ресурсов, созданные с помощью предварительных версий .NET Framework, могут не работать в поддерживаемых версиях платформы .NET Framework.

CA2229: применяйте конструкторы сериализации

Чтобы устранить нарушение этого правила, реализуйте конструктор сериализации. Для запечатанного класса конструктор должен быть закрытым, а в иных случаях — защищенным.

CA2230: используйте параметры для аргументов переменной

Открытый или защищенный тип содержит открытый или защищенный метод, который использует соглашение о вызовах VarArgs вместо ключевого слова params.

CA2231: перегружать равенство операторов следует при перегрузке ValueType.Equals

Тип значения переопределяет Object.Equals, но не реализует оператор равенства.

CA2232: отметьте точки входа Windows Forms меткой STAThread

Атрибут STAThreadAttribute указывает, что потоковой моделью COM для приложения является однопотоковое подразделение. Данный атрибут должен находиться в точке входа любого приложения, использующего Windows Forms; если он отсутствует, компоненты Windows могут работать неправильно.

CA2233: в операциях не должно быть переполнений

Прежде чем выполнять арифметические операции, необходимо проверить операнды и убедиться, что результат операции находится в диапазоне возможных значений для используемых типов данных.

CA2234: передавайте объекты System.Uri вместо строк

Вызывается метод, имеющий параметр строки, имя которого содержит uri, URI, urn, URN, url или URL. Объявляющий тип метода содержит соответствующую перегрузку метода, которая имеет параметр System.Uri.

CA2235: помечайте все несериализуемые поля

Экземпляр поля несериализуемого типа объявлен в сериализуемом типе.

CA2236: вызывайте методы базового класса для типов ISerializable

Чтобы устранить нарушение этого правила, вызовите метод базового типа GetObjectData или конструктор сериализации из соответствующего метода производного типа или конструктора.

CA2237: пометьте типы ISerializable атрибутом SerializableAttribute

Чтобы среда CLR распознавала тип как сериализуемый, он должен быть помечен атрибутом SerializableAttribute, даже если тип использует пользовательскую процедуру сериализации посредством реализации интерфейса ISerializable.

CA2238: следует правильно реализовывать методы сериализации

Метод, обрабатывающий событие сериализации, не имеет правильной сигнатуры, возвращаемого типа или отображения.

CA2239: предоставляйте методы десериализации для необязательных полей

Тип имеет поле, помеченное атрибутом System.Runtime.Serialization.OptionalFieldAttribute, и не предоставляет методы обработки событий десериализации.

CA2240: правильно реализуйте ISerializable

Чтобы устранить нарушение данного правила, сделайте метод GetObjectData доступным для внешнего кода и переопределяемым и убедитесь, что все поля экземпляра включены в процесс сериализации или явно помечены атрибутом NonSerializedAttribute.

CA2241: предоставьте правильные аргументы методам форматирования

Аргумент формата, переданный методу System.String.Format, не содержит элемент форматирования, соответствующий каждому аргументу объекта, или наоборот.

CA2242: правильно выполняйте проверку NaN

Это выражение проверяет значение на соответствие Single.Nan или Double.Nan. Используйте Single.IsNan(Single) или Double.IsNan(Double) для проверки значения.

CA2243: синтаксический анализ строковых литералов атрибута должен осуществляться правильно

Не удается правильно выполнить синтаксический анализ параметра строкового литерала атрибута для URL-адреса, идентификатора GUID или версии.

Журнал изменений

Дата

Журнал

Причина

Август 2010

Добавлены отсутствовавшие общие сведения для предупреждений CA1801, CA1806 и CA1816.

Обратная связь от клиента.