确保的 CodeContract 问题

发布于 2024-11-27 13:10:14 字数 671 浏览 2 评论 0原文

我得到以下代码:

    protected virtual string FormatException(Exception exception, int intendation)
    {
        Contract.Requires(intendation >= 0);
        Contract.Requires<ArgumentNullException>(exception != null);
        Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));

        var msg = exception.ToString().Replace("\r\n", "\r\n".PadRight(intendation, '\t'));
        string text = string.Format("\r\n******* EXCEPTION ********\r\n\t{0}", msg);
        return text;
    }

它给了我

警告 19 CodeContracts:确保未经验证:!String.IsNullOrEmpty(Contract.Result())

为什么?

I got the following code:

    protected virtual string FormatException(Exception exception, int intendation)
    {
        Contract.Requires(intendation >= 0);
        Contract.Requires<ArgumentNullException>(exception != null);
        Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));

        var msg = exception.ToString().Replace("\r\n", "\r\n".PadRight(intendation, '\t'));
        string text = string.Format("\r\n******* EXCEPTION ********\r\n\t{0}", msg);
        return text;
    }

It gives me

Warning 19 CodeContracts: ensures unproven: !String.IsNullOrEmpty(Contract.Result())

Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌无敌 2024-12-04 13:10:14

我不知道 String.Format() 函数是否有任何约定,但它只能承诺 result != null,即空字符串是有效结果。

我检查过: String.Format() 仅确保结果!= null

您可以通过插入 Assume() 来简单地修复它:

Contract.Assume(!String.IsNullOrEmpty(text));
return text;

但我会认真重新考虑制作结果此处的合同部分不为空。这对来电者真的很重要吗?

I don't know if the String.Format() function has any contracts but it could only promise that the result != null, an empty string is a valid result.

I checked: String.Format() only ensures result != null

You can simply fix it by inserting an Assume() :

Contract.Assume(!String.IsNullOrEmpty(text));
return text;

But I would seriously reconsider making result is not empty part of your contract here. Does it really matter to the callers?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文