我正在调查Code Contracts,我正在实现这样的Builder Pattern:
public class PersonCaution
{
private PersonCaution()
{
}
public string CautionType { get; private set; }
public string Remarks { get; private set; }
public class Builder
{
private string _cautionType;
private string _remarks;
public Builder WithCautionType(string value)
{
Contract.Ensures(Contract.Result<Builder>() != null);
_cautionType = value;
return this;
}
public Builder WithRemarks(string value)
{
Contract.Ensures(Contract.Result<Builder>() != null);
_remarks = value;
return this;
}
public PersonCaution Build()
{
Contract.Ensures(Contract.Result<PersonCaution>() != null);
return new PersonCaution
{
CautionType = _cautionType,
Remarks = _remarks
};
}
}
}
这是一个片段,展示了我如何使用Builder类:
if (row != null)
{
var builder = new PersonCaution.Builder()
.WithCautionType((string)row.Element("PersonCaution__Type1G"))
.WithRemarks((string)row.Element("PersonCaution__Remarks"));
if (builder != null)
{
personCautions.Add(builder.Build());
}
}
但是,Code Contracts静态检查程序失败并出现此错误:
可能在空引用上调用方法。您是否期望NWP.PointServices.Domain.Model.People.PersonCaution + Builder.WithCautionType(System.String)返回非null?
问。我认为Contract.Ensures后置条件会满足静态检查器,但事实并非如此。我该怎么做才能删除错误?非常感谢。
注意。如果Builder类与调用它的代码位于单独的Project中,我只会看到问题。
更多信息:
答案 0 :(得分:1)
正如我们所知,您只需要从CC项目选项卡启用合同参考的构建,以启用跨项目分析(&#34;合同参考大会&#34; =&#34; Build&#34;)