我正在使用ReSharper 8.0和VS2012编写.NET 4.0的C#代码。
ReSharper包含一个属性:JetBrains.Annotations.PureAttribute。这用于提供“未使用纯方法的返回值”检查。
Code Contracts包括一个属性:System.Diagnostics.Contracts.PureAttribute。代码合同检查使用它来确保调用不会产生可见的状态更改,因此不需要重新检查对象的状态。
目前,为了获得这两个工具的功能,必须对方法进行注释以使用每个属性。更糟糕的是,因为它们共享相同的类型名称,所以您需要限定每个属性。
[Pure]
[Jetbrains.Annotations.Pure]
public bool isFinished() {
...
为了避免这种情况,应该采取以下三种方法之一:
- 编写一个被ReSharper和Contracts都能识别的占位符
- 让ReSharper识别Contracts属性
- 让Contracts识别ReSharper属性
System.Diagnostics.Contracts.PureAttribute
定义时使用了[Conditional("CONTRACTS_FULL")]
。这意味着,除非使用完整的运行时合同检查构建,否则 ReSharper 将无法看到它,而这并不总是理想的选择。 - VaronPureAttribute
,除非在编译时定义了CONTRACTS_FULL
。然而,ReSharper 仍然可以在源代码中看到它 - ReSharper 只查看属性的名称,而不是任何条件设置。 - citizenmattSystem.Diagnostics.Contracts.PureAttribute
:) - porges