-1
私は特別なランダマイザクラスを作成しており、CodeContractsを使用してその品質を保証したいと考えています。典型的なランダム化方法は上限値「max」を受け取り、その限界値以下の正のランダム値を返す。 pick()
がランダムUInt32
返しモジュラス(%)演算子のCodeContractsが失敗しますか?
public int Next(int max)
{
Contract.Requires<ArgumentOutOfRangeException>(0 <= max && max <= int.MaxValue);
Contract.Ensures(0 <= Contract.Result<int>());
Contract.Ensures(Contract.Result<int>() < maxValue);
return (int)(pick() % maxValue);
}
。私の質問:CodeContractsが最後の "保証"に失敗するのはなぜですか?
おそらく 'maxValue!= max'です。 –
'max == 0'ならあなたのコードは例外をスローします。あなたの 'max'パラメータは、最大値を表すのではなく、最大値に1を加えたものであるため、悪い名前が付けられます。 – CodesInChaos
あなたのコードはコンパイルできません。あなたはそこに 'max'と' maxValue'を持っています。 – CodesInChaos