捕捉“Sequence contains no elements”的最佳方法

4
如果 Single 未找到您期望存在的元素,则会引发 InvalidOperationException 。唯一的问题是其他事情也会导致此异常。例如,EF Code First模型过时。
我尝试通过检查异常消息来缩小范围。但是,这可能会改变,而我却毫不知情。有没有更好的捕获此问题的方法?
   try
    {
        return DbSet.Single(filter);
    }
    catch (InvalidOperationException exc)
    {
        if (exc.Message == "Sequence contains no elements")
        {
            throw new UserNotFoundException();
        }

        throw;
    }
1个回答

4

使用.FirstOrDefault()代替。然后检查结果是否为null。如果是,则表示未找到用户。


好的。这有点违背了第一原则,不是吗? - Ian Warburton
1
First和Single都有它们的用途。当你知道至少有一个元素,并且你不可能没有元素时,你可以使用Single。 - user47589
当期望的结果为 int 类型且默认值为 0 时,它无法正常工作。 - sritmak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接