具有生成器模式的C#代码契约-“;可能对空引用调用方法”;
本文关键字:引用 方法 调用 模式 契约 代码 | 更新日期: 2023-09-27 17:58:30
我正在研究代码契约,并正在实现这样的生成器模式:
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());
}
}
然而,代码合同静态检查器失败,并出现以下错误:
可能对null引用调用方法。您希望NWP.PointServices.Domain.Model.Peoples.PersonCaution+Builder.WithCautionType(System.String)返回非null吗?
Q。我以为Contract.确保后条件会满足静态检查器的要求,但事实并非如此。我需要做些什么来删除错误?非常感谢
注意。只有当Builder类与调用它的代码在一个单独的项目中时,我才会看到这个问题。
更多信息:
- Visual Studio Professional 2015 14.0.25424.00更新3
- 所有项目目标.Net 4.6.1
- 通过Visual Studio扩展1.8版安装的代码约定
- 我在项目的其他(非构建者)领域成功地使用了代码合约
正如我们所发现的,您所需要的只是从CC项目选项卡启用合同参考的构建,以启用跨项目分析("合同参考汇编"="构建")