を使用する場合、私は次のメソッドを持っている:コードコントラクト - 必須/証明されていない保証私はIComparableをやIComparableを<T>
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
です。私は本当にここでこれを修正する適切な方法はよく分かりません。比較値を実際にlowerBoundとupperBoundの値が実際に持ち、lowerBoundの値がupperBoundの値を超えていないことを確認する必要があります。
ああ、実際の<または>演算子はタイプ 'T'に適用できないため、使用できません。
最後に、私が知っているこのは別の質問することができますが、それは非常に関連しています...私はまだCA1062コード分析エラーが出る理由を誰かが知っている場合、私は、コードがv1.4.50126.1をコントラクト使用しているときそれを修正するために何をすべきかを教えてください:CA1062: Microsoft.Design : In externally visible method 'MyClass.IsBetween<T>(this IComparable<T>, T, T), validate parameter 'upperBound' before using it.
私は 'Contract'を使用していませんが、警告はメソッド定義自体ではなく、あなたのメソッドのコードに関係しませんか?あなたは、条件に違反しているあなたのアプリケーションで何か電話をしていますか? – Douglas
Nope。これは私のユーティリティクラスです。そのクラスのコードはこのメンバを呼び出しません。それは100%単離されている。 –
CA1062分析を削除することをおすすめします。現時点ではコード契約と互換性がなく、潜在的な問題がある場合は、コード契約により警告されます。 – porges