这段代码:
private static char GetBarcodeChecksumWithLegacyCode(string barcodeWithoutCzechSum)
{
Contract.Requires(!string.IsNullOrWhiteSpace(barcodeWithoutCzechSum));
Contract.Ensures(Contract.Result != null);
. . .
...不编译(“运算符'!='不能应用于'方法组'和'' ”类型的操作数)。
这以同样的方式失败:
Contract.Ensures(Contract.ValueAtReturn != null);
如何强制使用代码合同返回结果的方法的必要性?
更新
如果我这样做:
Contract.Ensures(Contract.Result<char>() != '');
...它失败了,“空字符文字”
那么这是测试返回的 char val 既非空又非空的方法:
Contract.Ensures(Contract.Result<char>() != null && Contract.Result<char>().ToString() != string.Empty);
...或者空检查是否足够?
顺便说一句,尝试使用 ValueAtReturn 而不是 Result 给了我“方法 'ValueAtReturn' 没有重载需要 0 个参数”
更新 2
这段代码:
Contract.Ensures(Contract.Result<String>() != null && Contract.Result<String>() != string.Empty);
失败:
在 BarcodeCzechDigitTester.Form1.GetBarcodeChecksumWithLegacyCode(System.String) 方法中:检测到使用“System.String”调用 Result,应该是“System.Char”。
(两次)另外:“命令 ""C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe" "@BarcodeCzechDigitTesterccrewrite.rsp"" 以代码 2 退出。 "
...但是将代码更改为此有效:
Contract.Ensures(Contract.Result<char>() != null && Contract.Result<char>().ToString() != string.Empty);