У меня есть кусок кода, который выглядит немного как это: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.Result()! = Null); предоставить дополнительную документацию библиотечным клиентам
Это, очевидно, полностью избыточно! У меня есть несколько таких избыточных предупреждений, и это становится проблемой (реальные предупреждения зарываются в поток избыточных предложений).
Поэтому у меня есть два вопроса:
1) Могу ли я что-то отсутствую, что означает, что это не лишняя рекомендация? В этом случае, что мне нужно сделать, чтобы исправить это предупреждение?
2) В качестве альтернативы, если это просто причуда CCCheck и не может быть исправлена, как я могу скрыть или подавить это предупреждение?
N.b. На всякий случай, если вы думаете, что в моем примере отсутствует что-то важное, полный код - это метод SubRegionhere.
Какую версию кодовых контрактов вы используете? –
Глядя на ваш код, я думаю, что проблема еще ниже. В 'SubRegion' есть вызов' ConstructFromSlicePart', который, в свою очередь, имеет вызов 'Construct (IReadOnlyList shape)'. Внутри 'Construct' последняя строка' return default (TSection) '. Если 'TSection' является ссылочным типом, то метод возвращает null. Это может быть причиной, которая в конечном итоге проявляется в этом предупреждении. –
Версия CC - 1.9.10714.2 - насколько я вижу, это последнее. re: construct, вы уверены, что не искали в классе контрактов? Единственная реальная реализация Construct такова: https://bitbucket.org/martindevans/base-citygeneration/src/0128578a6228487ac3d98398bf0c8ed8bb43d0f5/Base-CityGeneration/Elements/Building/Internals/Floors/Design/Region.cs?at=default&fileviewer=file -view-default # Region.cs-34, который, очевидно, никогда не возвращает null! – Martin