最佳捕捉方式 "Sequence contains no elements"

Best way to catch "Sequence contains no elements"

如果 Single 没有找到您期望存在的元素,那么它会抛出一个 InvalidOperationException。唯一的麻烦是其他事情也会导致此异常。例如,EF Code First 模型已过时。

我试图通过检查异常消息来缩小范围。然而,这可能会改变,我会 none 变得更聪明。有没有更好的方法来解决这个问题?

   try
    {
        return DbSet.Single(filter);
    }
    catch (InvalidOperationException exc)
    {
        if (exc.Message == "Sequence contains no elements")
        {
            throw new UserNotFoundException();
        }

        throw;
    }

改用.FirstOrDefault()。然后检查结果是否为空。如果是,则未找到该用户。