代码契约:如何抑制这种“需要未经证实的”;警告
本文关键字:证实 警告 契约 何抑制 代码 | 更新日期: 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);
}
我的代码已经要求value
是IsNotEmpty
:
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);
}