(也posted on the MSDN forum - 但是,這並沒有得到多少流量,據我可以看到。)代碼合同應該靜態檢查器能夠檢查算術限制嗎?
我一直在試圖提供的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;
}
(關於能夠在一個空引用,而不是現有的Random
引用傳遞的業務純粹是教學的,當然。)
我所希望的,如果檢查員知道firstRoll
和secondRoll
各自在[1, 6]
的範圍內,所以能夠確定總和在[2, 12]
的範圍內。
這是不合理的希望嗎?我意識到這是一個棘手的業務,正在計劃可能發生的事情......但我希望檢查器足夠聰明:)
如果現在不支持,現在有沒有人知道它是否可能受支持在接近未來的未來?
編輯:我現在發現,靜態檢查器中有非常複雜的算術選項。使用「高級」文本框,我可以從Visual Studio中嘗試它們,但根據我的情況,沒有像他們所做的那樣正確的解釋。
喬恩,你有沒有試過直接聯繫DevLabs的傢伙?您將在本頁底部找到列出的團隊成員:http://research.microsoft.com/en-us/projects/contracts/ – 2009-08-07 11:53:35
並且他們的電子郵件地址是codconfb _at_ microsoft _dot_ com(如上所述相同的頁面)。我很想知道你的問題的答案。 – 2009-08-07 11:54:54
我認爲先在論壇上提出問題會更有禮貌......如果我沒有在論壇上或在這裏聽到回覆,我也會通過電子郵件詢問。 – 2009-08-07 12:04:18