( MSDN フォーラムにも投稿されていますが、私が見る限り、トラフィックはそれほど多くありません。)
Assert
との例を提供しようとしていますAssume
。これが私が持っているコードです:
public static int RollDice(Random rng)
{
Contract.Ensures(Contract.Result<int>() >= 2 &&
Contract.Result<int>() <= 12);
if (rng == null)
{
rng = new Random();
}
Contract.Assert(rng != null);
int firstRoll = rng.Next(1, 7);
Contract.Assume(firstRoll >= 1 && firstRoll <= 6);
int secondRoll = rng.Next(1, 7);
Contract.Assume(secondRoll >= 1 && secondRoll <= 6);
return firstRoll + secondRoll;
}
(もちろん、既存の参照の代わりに null 参照を渡すことができるというビジネスRandom
は、純粋に教育的なものです。)
firstRoll
チェッカーがそれを知っていて、secondRoll
それぞれが範囲内[1, 6]
にある場合、合計が範囲内にあると判断できると思っていました[2, 12]
。
これは無茶な希望ですか?何が起こるかを正確に把握するのはトリッキーなビジネスだと思います...しかし、チェッカーが十分にスマートであることを望んでいました:)
これが現在サポートされていない場合、近い将来サポートされる可能性があるかどうかを知っている人はいますか?
編集:静的チェッカーの算術演算には非常に複雑なオプションがあることがわかりました。「高度な」テキスト ボックスを使用して、Visual Studio からそれらを試すことができますが、私が知る限り、それらが何をするかについての適切な説明はありません。