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. Проверьте окно вывода сборки для получения необходимой информации.

Другие вопросы по тегам