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

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

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

我的问题是如果没有与谓词匹配的项目或者有多个项目, Single()会抛出相同的错误。 我的想法是将Single()调用放在try中并捕获exception,添加项目,然后继续。 但是,由于两种情况都会抛出InvalidOperationException ,如何判断它是否由于没有项目或多项?

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

我也可以在Single()调用之前使用Count() ,但这似乎只是破坏了Single()的要点

你想要的是SingleOrDefault()

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

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

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