c# - 如何使用代码契约来确保方法始终返回非空、非空值?

标签 c# code-contracts

这段代码:

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/

相关文章:

c# - 禁用 EF Core 的包含所有属性的约定

c# - 我可以在框架方法上使用 SuppressMessage 吗?

c# - 如何取消符号 CONTRACTS_FULL 的定义?

c# - 为什么 Code Contracts 静态分析器不平等对待这些属性 getter 调用?

c# - 使用带有类型条件的通用接口(interface)的代码契约

c# - 使用 Entity Framework 的 Struct 变通方法,Code-First 方法

c# - 当两者都是不同类型但继承自同一父类时,如何将一个对象转换为另一个对象

c# - 传递参数,是否发生拆箱

c# - 如何将文件从 c# winforms 应用程序拖到 outlook 消息

.net - 我需要安装什么才能使代码合约与 2010 兼容