gpt4 book ai didi

.NET 4 代码契约 : "requires unproven: source != null"

转载 作者:行者123 更新时间:2023-12-04 21:25:02 25 4
gpt4 key购买 nike

我刚开始在我的项目中使用代码契约。但是,我的存储库实现有问题,它使用 Entity Framework 查询我的数据库。

我有以下方法:

public IEnumerable<Organization> GetAllOrganizations()
{
return _uow.CreateSet<Party>().OfType<Organization>().AsEnumerable();
}

该方法返回一个包含数据库中所有组织的集合,或者一个空集合,数据库中没有组织。

但是,根据 CodeContracts,这是不行的,这给了我错误:“需要未经证实:源 != null”

它想告诉我什么?我可以通过使用 Contract.Assume 来满足代码契约,假设它总能找到一些东西,但是我需要在从数据库读取数据的所有方法中这样做。

我在这里遗漏了什么,还是在您使用数据库和 LINQ 时它是预期的行为?

最佳答案

我的猜测是,CreateSet、OfType 和 AsEnumerable 方法之一被声明为具有名为“source”的 this 参数的扩展方法,并且 CodeContrcts 无法证明它不为空。另外,您是否不需要添加 Requires 子句来指定 _uow 在条目上为非空?

CreateSet 似乎是扩展方法,因为它没有出现在 MSDN 中。如果该方法不应该返回 null,您可以通过将此契约(Contract)添加到 CreateSet 来强制执行此操作。 :

Contract.Ensures(Contract.Result<T>() != null);

当 CodeContracts 分析器看到这个规则时,它会作为对 OfType 的输入的证明。不会为空,警告应该消失。

关于.NET 4 代码契约 : "requires unproven: source != null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com