gpt4 book ai didi

linq-to-sql - 使用代码契约和 Linq To Sql 时如何避免 "source !=null"?

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

我有以下代码使用正常的数据上下文,效果很好:

var dc = new myDataContext();
Contract.Assume(dc.Cars!= null);
var cars = (from c in dc.Cars
where c.Owner == 'Jim'
select c).ToList();

但是,当我将过滤器转换为这样的扩展方法时:
var dc = new myDataContext();
Contract.Assume(dc.Cars!= null);
var cars = dc.Cars.WithOwner('Jim');

public static IQueryable<Car> WithOwner(this IQueryable<Car> cars, string owner)
{
Contract.Requires(cars != null);
return cars.Where(c => c.Owner == owner);
}

我收到以下警告:

warning : CodeContracts: requires unproven: source != null

最佳答案

我的猜测是您的警告是由所有者参数引起的,而不是由汽车引起的。在 WithOwner 方法中添加一个先决条件来检查 owner 是否不为 null。

public static IQueryable<Car> WithOwner(IQueryable<Car> cars, string owner)
{
Contract.Requires(cars != null);
Contract.Requires(!string.isNullOrEmpty(owner));
return cars.Where(c => c.Owner = owner);
}

在您的第一个代码示例中,您对“Jim”进行了硬编码,因此没有问题,因为没有可以为空的内容。

在您的第二个示例中,您创建了一个方法,静态编译器无法证明该方法的源(所有者)“永远不会为空”,因为其他代码可能会使用无效值调用它。

关于linq-to-sql - 使用代码契约和 Linq To Sql 时如何避免 "source !=null"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050279/

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