代码契约:如何抑制这种“需要未经证实的”;警告

本文关键字:证实 警告 契约 何抑制 代码 | 更新日期: 2023-09-27 18:13:54

我有一段代码,其中cccheck告诉我Requires()未被证明,并且我应该添加!string.IsNullOrWhitespace(...)。当我调用我自己在。net 3.5时代编写的扩展方法时,这个条件已经检查过了:

public static bool IsEmpty(this string s)
{
    if (s == null) return true;
    if (s.Length == 0) return true;
    for (int i = 0; i < s.Length; i++)
        if (!char.IsWhitespace(s[i]))
            return false;
    return true;
}
public static bool IsNotEmpty(this string s)
{
    return !IsEmpty(s);
}

我的代码已经要求valueIsNotEmpty:

Contract.Requires(value.IsNotEmpty(), "The parameter 'value' cannot be null or empty.");

我如何告诉cccheck(和代码契约框架的其余部分)IsNotEmpty()已经检查了!string.IsNullOrWhitespace(...) ?

代码契约:如何抑制这种“需要未经证实的”;警告

试试Contract.Ensures(Contract.Result() == !string.IsNullOrWhitespace(s))

编辑:

是的,当我发布它的时候,我意识到这会导致"确保未经证实",我希望能找到一些时间来更彻底地回答。有一种(有点琐碎的)修复方法,如果你能忍受扔掉旧代码:

public static bool IsEmpty(this string s) 
{ 
    Contract.Ensures(Contract.Result() == string.IsNullOrWhitespace(s))
    return string.IsNullOrWhitespace(s);
} 
public static bool IsNotEmpty(this string s) 
{ 
    Contract.Ensures(Contract.Result() == !string.IsNullOrWhitespace(s))
    return !string.IsNullOrWhitespace(s);
}