gpt4 book ai didi

c# - Linq 在创建选择之前检查

转载 作者:行者123 更新时间:2023-11-30 22:51:44 25 4
gpt4 key购买 nike

我有一个 Linq 查询如下

NOVId = (v.NOVId != null ? new List<int> { v.NOVId ?? default(int) }
: (from n in novs where n.Violations.Any(a => a.ViolationId == v.ViolationId) select v.NOVId ?? default(int)).ToList())

,我想要的是,它在 n.Violations 或 a.ViolationId 处失败,因为有些 nov 没有违规,我该如何解决这个问题?它不应该失败,只是在没有错误或异常的情况下通过 - 意味着只有当 n.Violations 有违规时才应该选择,否则只返回 0 或 null - 请帮忙吗?提前致谢。

最佳答案

确保在 Nov 的构造函数中实例化您的枚举。

public class Nov
{
public Nov()
{
Violations = Enumerable.Empty<Violation>();
}

public IEnumerable<Violation> Violations { get; }
}

因此,您知道始终存在对空的违规枚举的引用。

如果它是一个复杂的对象或者当对象在整个代码中被实例化多次或者有很多不同的方法可以构造这个对象(你也可以在这里使用构建器模式)你也可以在这里使用工厂如下方式。

public class NovFactory
{
public INov Create()
{
return new Nov
{
Violations = Enumerable.Empty<Violation>();
}
}
}

public interface INov
{
IEnumerable<Violation> Violations { get; }
}

public class Nov : INov
{
public IEnumerable<Violation> Violations { get; set; }
}

关于c# - Linq 在创建选择之前检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886575/

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