Есть ли способ указать ReSharper, что нулевая ссылка не будет возникать из-за конструирования по контракту Требует проверки? Например, следующий код поднимет предупреждение (Possible 'null' assignment to entity marked with 'NotNull' attribute
) в ReSharper в строках 7 и 8:
private Dictionary<string, string> _Lookup = new Dictionary<string, string>();
public void Foo(string s)
{
Contract.Requires(!String.IsNullOrEmpty(s));
if (_Lookup.ContainsKey(s))
_Lookup.Remove(s);
}
Что действительно странно, так это то, что если вы удалите строку Contract.Requires(...)
, сообщение ReSharper исчезнет.
Обновление
Я нашел решение через ExternalAnnotations, о котором также упоминал Майк ниже. Вот пример того, как это сделать для функции в Microsoft.Contracts:
- Создайте каталог под
Microsoft.Contracts
в каталогеExternalAnnotations
ReSharper. - Далее, создайте файл с именем
Microsoft.Contracts.xml
и запишите так:
<assembly name="Microsoft.Contracts">
<member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)">
<attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/>
<parameter name="condition">
<attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)">
<argument>0</argument>
</attribute>
</parameter>
</member>
</assembly>
- Перезапустите Visual Studio, и сообщение исчезнет!