这段代码:
private static char GetBarcodeChecksumWithLegacyCode(string barcodeWithoutCzechSum)
{
Contract.Requires(!string.IsNullOrWhiteSpace(barcodeWithoutCzechSum));
Contract.Ensures(Contract.Result != null);
. . .
...无法编译(“运算符 '!=' 不能应用于类型为 'method group' 和 '' 的操作数”)。
同样会失败:
Contract.Ensures(Contract.ValueAtReturn != null);
如何使用代码契约强制方法返回结果的必要性?
更新
如果我这样做:
Contract.Ensures(Contract.Result<char>() != '');
...失败并显示“空字 rune 字”
这是测试返回的 char val 是否为非 null 和非空的方法:
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);
最佳答案
你需要这样:
Contract.Ensures(Contract.Result<string>() != null);
关于c# - 如何使用代码契约来确保方法始终返回非空、非空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991450/