鉴于此类,我不确定为什么会收到 Ensure unproven Result != null 警告。
public class MyClass {
private readonly string _value;
public MyClass(string value) {
Contract.Requires(value != null);
_value = value;
}
public string Value {
get {
Contract.Ensures(Contract.Result<string>() != null);
return _value;
}
}
}
我可以通过添加 _value != null 的不变量来消除警告,但感觉我不应该这样做。这只是分析的限制吗?
编辑:为问题添加更多内容,因为我认为我的问题的重点被遗漏了。
public class Test {
private string _value = "";
public string Value {
get {
Contract.Ensures(Contract.Result<string>() != null);
return _value;
}
set {
Contract.Requires<ArgumentNullException>(value != null);
_value = value;
}
}
}
CC 分析似乎对这个类非常满意;在ctor中分配了一个非空值,因此证明Requires
了要更改的setter非空值。_value
Ensures