LINQ Single()0或多个项目的例外

时间:2012-11-21 17:08:31

标签: c# linq ienumerable

我有一些IEnumberable项目集合。我使用.Single()来查找集合中的特定对象。

我选择使用Single(),因为应该只有一个特定的项目。但是,如果不存在,那么我需要创建它并将其添加到集合中。

我的问题是,如果没有与谓词匹配的项目或者有多个项目,Single()会抛出相同的错误。我的想法是将Single()调用置于try中并捕获异常,添加项目,然后继续。但是,由于这两种情况都抛出了InvalidOperationException,我怎么能判断它是由于没有物品还是多件物品?

我知道我可以使用First(),但这并不强制说应该只有一个(没有做额外的工作)。

我也可以在Count()来电前使用Single(),但这似乎只会破坏Single()

的要点

2 个答案:

答案 0 :(得分:35)

你想要的是SingleOrDefault()

“或default”实际上意味着它返回null(对于引用类型)或者对于非引用类型的默认值。你需要新建一个对象才能取而代之。

答案 1 :(得分:5)

我不建议在这种情况下使用try / catch,因为使用异常来做出逻辑决策是非常昂贵的。

我建议使用SingleOrDefault(),并检查结果是否为null。如果是。做你的创作。