为什么此代码未被标记为可能违反代码合同?

时间:2013-09-24 21:34:48

标签: c# char code-contracts visual-studio-2013

也许我不是在跟代码合同,而是ISTM这段代码:

private static char GetBarcodeChecksumWithLegacyCode(string barcodeWithoutCzechSum)
{
    Contract.Requires(!string.IsNullOrWhiteSpace(barcodeWithoutCzechSum));
    Contract.Ensures(Contract.Result<char>() != null && Contract.Result<char>().ToString().Trim() != string.Empty); // <-- should fail if length of arg less than 6, which would return a "space" char (' ')

    if (barcodeWithoutCzechSum.Length > 6)
    {
        . . .
        var ch = (char)(48 + b);
        return ch;
    }
    return ' ';
}

...在某些情况下会返回' '的字符,它会在“确保”中转换为空字符串,不会导致合同检查程序发出警告或发出尖叫声。不应该吗?

更新

好吧,我错误地认为代码合同应该发生什么 - 我认为他们会在编译时告诉我我的合同有失败的危险。

实际上,它们在运行时失败时会发出尖叫声。当我将有效的arg传递给方法时,没问题;当我传递一个太短的字符串时(少于6个字符),它告诉我:“* System.Diagnostics.Contracts .__ ContractsRuntime.ContractException未处理   的HResult = -2146233088   消息=后置条件失败:Contract.Result()。ToString()。Trim()!= string.Empty *“

0 个答案:

没有答案