Tag: code contract

ReSharper – 使用Microsoft.Contracts时可能的空分配

有什么方法可以向ReSharper表明由于devise合同需要检查而不会出现空引用? 例如,下面的代码将在第7和第8行的ReSharper中提出警告( Possible 'null' assignment to entity marked with 'NotNull' attribute ): 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消息就会消失。 更新 我通过ExternalAnnotationsfind了解决scheme,Mike在下面也提到了这个解决scheme。 下面是一个如何为Microsoft.Contracts中的函数实现的示例: 在ExternalAnnotations ReSharper目录下创build一个名为Microsoft.Contracts的目录。 接下来,创build一个名为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,消息消失!