这两段C#代码的实现逻辑是否完全一致?
两段C#代码逻辑一致性及FirstOrDefault返回值求证
结论:两段代码逻辑完全一致,FirstOrDefault()未找到匹配项时会返回null(针对Item这种引用类型)
代码逻辑对比
- 第一段代码通过
foreach遍历Items集合,找到第一个ID与输入参数匹配的Item实例后立即返回;遍历结束未找到匹配项时,返回null。 - 第二段代码的
FirstOrDefault(item => item.ID == id)方法,本质就是实现了相同的逻辑:- 遍历集合,返回第一个满足
item.ID == id条件的元素 - 当集合中没有元素满足条件时,返回对应类型的默认值
- 遍历集合,返回第一个满足
关于默认值的说明
因为Item是引用类型(从第一段代码返回null的写法可以判断),而引用类型的默认值就是null,所以此时FirstOrDefault的返回行为和第一段代码完全一致。
如果Item是值类型(比如结构体),FirstOrDefault会返回该值类型的默认实例(所有成员为对应默认值的对象),但你的场景中不存在这种情况。
内容的提问来源于stack exchange,提问作者SpenceW
相关产品推荐
相关产品推荐

