CC, предлагающий резервирование, обеспечивает
У меня есть кусок кода, который выглядит примерно так:
public TReturn SubRegion(TParam foo)
{
Contract.Requires(foo!= null);
Contract.Ensures(Contract.Result<TReturn>() != null);
if (!CheckStuff(foo))
foo.Blah();
return OtherStuff(foo);
}
CC дает мне предупреждение:
Предупреждение 301 CodeContracts: рассмотрите возможность добавления постусловия Contract.Ensures(Contract.Result()!= Null); предоставлять дополнительную документацию клиентам библиотеки
Что, очевидно, совершенно излишним! У меня есть несколько таких избыточных предупреждений, и это становится проблемой (настоящие предупреждения погружаются в поток избыточных предложений).
Итак, у меня есть два вопроса:
1) Я что-то упустил, что означает, что это не избыточная рекомендация? В каком случае, что мне нужно сделать, чтобы исправить это предупреждение?
2) В качестве альтернативы, если это всего лишь причуда CCCheck и ее нельзя исправить, как я могу скрыть или подавить это предупреждение?
Nb. На тот случай, если вы считаете, что в моем примере отсутствует что-то важное, полный код - это метод SubRegion.
1 ответ
Относительно 2: Документация довольно хорошая, взгляните на 6.6.10 Фильтрация предупреждающих сообщений:
Чтобы указать статическому контролеру контракта не выдавать определенный класс предупреждений для метода (тип, сборка), аннотируйте метод (тип, сборку) атрибутом:
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Contracts", warningFamily)]
где warningFamily является одним из:
Requires, Ensures, Invariant, NonNull, ArrayCreation, ArrayLowerBound, ArrayUpperBound, DivByZero, MinValueNegation
,При необходимости средство проверки статических контрактов позволяет также фильтровать одно предупреждение (а не всю семью). Для этого вы можете аннотировать метод с атрибутом
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Contracts", warningFamily-ILOffset-MethodILOffset)]
где
warningFamily
как указано выше, иILOffset
а такжеMethodILOffset
используются средством проверки статических контрактов для определения точки программы, к которой относится предупреждение. Смещения можно получить из средства проверки статических контрактов, предоставив ключ -outputwarnmasks в записи "Пользовательские параметры" на панели VS. Проверьте окно вывода сборки для получения необходимой информации.