代码合同:如何抑制这种“需要未经证实的”警告?

时间:2011-11-09 21:18:14

标签: c# .net-4.0 code-contracts

我有一段代码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(...)

1 个答案:

答案 0 :(得分:3)

尝试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);
}