gpt4 book ai didi

c# - 为什么这个 Linq 函数返回 true 而不是?

转载 作者:行者123 更新时间:2023-11-30 13:16:59 25 4
gpt4 key购买 nike

我编写了一个“微类”来进行一些快速数据操作。

这是元素:

class AEmp {
public AEmp() {
Parts = new AParts();
}
public string Badge { get; set; }
public AParts Parts { get; set; }
public int Days { get; set; }
}

这是列表:

class AEmps {
private List<AEmp> list;
public AEmps() {
list = new List<AEmp>();
}
public AEmp this[string badge] {
get { return list.SingleOrDefault(e => e.Badge == badge); }
}
public void Add(AEmp item) {
if (!Contains(item.Badge)) {
list.Add(item);
}
}
public bool Contains(string badge) {
return (list.Where(o => o.Badge == badge) != null);
}
public int Count { get { return list.Count; } }
public AEmp Owner(string serialNo, DateTime startDay, DateTime nextDay) {
return (list.SingleOrDefault(e => e.Parts.Contains(serialNo, nextDay)));
}
}

我面临的问题是当我向列表中添加新项目时。我不想添加已存在的项目,因此我使用 Contains 方法对其进行检查。

列表为空(计数 = 0),因此 list.Where(o => o.Badge == badge) != null) 应该返回 FALSE

对吧?

我做错了什么?

最佳答案

Right?

错了。一个空序列恰好表示为……一个空序列。这与空引用不同。相反,它是一个您可以照常调用成员的序列 - 您只是不会得到任何结果。哎呀,由于 LINQ 是惰性的,序列甚至知道是否有任何元素,直到您尝试请求它们。 Where 不可能返回 null 并且仍然延迟执行。

我想你想要Any相反。

return list.Any(o => o.Badge == badge);

请注意,一般来说,使用空序列(空列表、空数组等)比使用空引用更干净——它允许调用者有一条路径,这两种路径都可以工作,而不必检查空值每一步。

关于c# - 为什么这个 Linq 函数返回 true 而不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18082739/

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