我有一个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处失败,因为有些新手没有违规,我该如何解决?它应该不会失败,不会出现错误或异常-意味着只有在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在创建select之前进行检查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58886575/

10-17 01:01