我有以下方法:
public static bool IsBetween<T>(this IComparable<T> value, T lowerBound, T upperBound)
where T : IComparable<T>
{
Contract.Requires<>(value != null);
Contract.Requires<>(lowerBound != null);
Contract.Requires<>(upperBound != null);
Contract.Requires<>(upperBound.CompareTo(lowerBound) >= 0);
return IsBetween(value, lowerBound, upperBound, InclusionOptions.None);
}
public static bool IsBetween<T>(this IComparable<T> value, T lowerBound, T upperBound,
InclusionOptions options) where T : IComparable<T>
{
Contract.Requires<>(value != null);
Contract.Requires<>(lowerBound != null);
Contract.Requires<>(upperBound != null);
Contract.Requires<>(upperBound.CompareTo(lowerBound) >= 0); //Code Contracts Issue
...
}
这里的问题是它不喜欢我的最后一个要求。它指出CodeContracts: requires unproven: upperBound.CompareTo(lowerBound) >= 0
。我不确定在这里解决这个问题的正确方法。我需要确保当我进行比较值时,我实际上有一个真正的下界和上界值,并且下界值不高于上界值。
哦,我不能使用实际的 < 或 > 运算符,因为你不能将它们应用于类型“T”。
最后,我知道这可能是一个单独的问题,但它是高度相关的......如果有人知道为什么我在使用 Code Contracts v1.4.50126.1 时仍然出现 CA1062 代码分析错误,请告诉我如何解决它:CA1062: Microsoft.Design : In externally visible method 'MyClass.IsBetween<T>(this IComparable<T>, T, T), validate parameter 'upperBound' before using it.