C#中能否用SingleOrDefault()简化列表判断逻辑?
结论:老板的写法不满足你的需求
直接写return list.SingleOrDefault()会在两个关键场景下违反你的需求,甚至抛出异常:
- 当
list为null时:调用list.SingleOrDefault()会触发NullReferenceException,但你要的是返回null。 - 当
list包含多个元素时:SingleOrDefault()会抛出InvalidOperationException,而你需要返回null。
只有当列表恰好有1个元素,或者是空列表时,老板的写法和你的原代码行为一致。
符合需求的简化写法
你可以用空传播运算符简化原代码,同时保证逻辑正确:
return list?.Count == 1 ? list[0] : null;
或者结合LINQ的Count():
return list?.Count() == 1 ? list.Single() : null;
这两种写法都能覆盖所有场景:
list为null→ 返回nulllist元素数量≠1 → 返回nulllist元素数量=1 → 返回该元素
内容的提问来源于stack exchange,提问作者diu_too_too
相关产品推荐
相关产品推荐

