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

Jus*_*elf 20 c# linq ienumerable

IEnumberable收集了一些物品.我用来.Single()在集合中找到一个特定的对象.

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

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

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

我也可以Count()Single()通话前使用,但这似乎只是破坏了重点Single()

Mic*_*lap 36

你想要的是什么 SingleOrDefault()

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

  • 好吧,它返回元素类型的默认值.对于引用类型,它是null,但显然不适用于不可为空的值类型... (6认同)
  • @JonSkeet足够公平,我更新了我的答案澄清. (4认同)

Kha*_*han 5

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

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

  • "资源昂贵" - 有些过时/不正确的观点.请参阅此处提供的Rico Mariani链接.http://stackoverflow.com/q/891217/16391.我同意使用异常来做出逻辑决策是一个糟糕的设计选择. (6认同)