我有一些IEnumberable
项目集合。我使用.Single()
来查找集合中的特定对象。
我选择使用Single()
,因为应该只有一个特定的项目。但是,如果不存在,那么我需要创建它并将其添加到集合中。
我的问题是,如果没有与谓词匹配的项目或者有多个项目,Single()
会抛出相同的错误。我的想法是将Single()
调用置于try中并捕获异常,添加项目,然后继续。但是,由于这两种情况都抛出了InvalidOperationException
,我怎么能判断它是由于没有物品还是多件物品?
我知道我可以使用First()
,但这并不强制说应该只有一个(没有做额外的工作)。
我也可以在Count()
来电前使用Single()
,但这似乎只会破坏Single()
答案 0 :(得分:35)
你想要的是SingleOrDefault()
“或default”实际上意味着它返回null(对于引用类型)或者对于非引用类型的默认值。你需要新建一个对象才能取而代之。
答案 1 :(得分:5)
我不建议在这种情况下使用try / catch,因为使用异常来做出逻辑决策是非常昂贵的。
我建议使用SingleOrDefault()
,并检查结果是否为null。如果是。做你的创作。