LINQ 获取单个结果或 null

Luí*_*ago 3 c# linq

当列表有 1 个元素时,是否有任何 LINQ 函数只返回 1 个元素,如果列表为空或有超过 1 个元素,则返回 null?当列表有超过 1 个元素时,SingleOrDefault 会引发异常...

Pav*_*ski 6

这个方法你可以自己写

var list = new List<object>();
var result = list.Count() == 1 ? list.FirstOrDefault() : null;
Run Code Online (Sandbox Code Playgroud)

更高效的选项,仅采用集合中的前两个元素(如评论中提到的@canton7)

var result = list.Take(2).Count() == 1 ? list.FirstOrDefault() : null;
Run Code Online (Sandbox Code Playgroud)

另外,Single可以使用 代替FirstOrDefault,但两种方法的作用相同,将源序列转换为IList并获取第一个元素。

由于每个问题的源集合是List<T>,因此使用List<T>索引器和Count属性是有意义的

var result = list.Count == 1 ? list[0] : null;
Run Code Online (Sandbox Code Playgroud)

  • 实际上,通过检查计数,您可以使用“Single”而不是“FirstOrDefault”。 (3认同)
  • 请注意,这可能会不必要地昂贵:一旦看到 2 个元素,您就可以停止检查 (2认同)