契約による設計がチェックを必要とするためにnull参照が発生しないことをReSharperに示す方法はありますか?たとえば、次のコードは、Possible 'null' assignment to entity marked with 'NotNull' attribute
7行目と8行目のReSharperで警告()を発生させます。
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を通じて解決策を見つけました。これは、以下のMikeによっても言及されています。これは、Microsoft.Contractsの関数に対してこれを行う方法の例です。
- ReSharperディレクトリ
Microsoft.Contracts
の下にというディレクトリを作成します。ExternalAnnotations
- 次に、というファイルを作成し、次の
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を再起動すると、メッセージが消えます。