gpt4 book ai didi

c# - 区分相同类型的异常,例如使用 Enumerable.Single()

转载 作者:行者123 更新时间:2023-11-30 21:47:20 24 4
gpt4 key购买 nike

考虑以下代码:

int myId = 10;

try
{
var me = this.Db.People.Single(p => p.Id = myId);
}
catch(InvalidOperationException e)
{
// Either I don't exist ("Sequence contains no elements"),
// or more than one of me exists ("Sequence contains more than one element")
}

有两种情况:要么返回 0 个结果(这可能不会太令人担忧,这个人只是不存在),要么返回超过 1 个结果(这意味着假设 ID 应该是独一无二)。

理想情况下,如果因为返回 0 个结果而抛出异常,我想捕获并处理异常,但如果因为返回多个结果而抛出异常,我不捕获异常(我无法处理这种情况,但是我不想简单地忽略一些非常错误的事情)。

有没有办法区分这两个异常,以便我只能处理返回 0 结果的情况,或者我唯一的选择是使用 SingleOrDefault 并检查 null?

最佳答案

答案在这里:

Either 0 results are returned (which might not be too alarming, the person just doesn't exist),

这不是“异常(exception)”,因为正如您所说,一个人可能不存在。所以当这种情况发生时我们不应该抛出异常。这就像访问网站并搜索产品。如果没有返回结果,那可能不是错误。这只是意味着他们不销售该产品。

or more than 1 result are returned (which means something is seriously wrong assuming ID is supposed to be unique).

如果不可能得到不止一个结果,那么不止一个结果应该抛出异常。

这使得 SingleOrDefault 成为最佳选择。检查 null,因为查询可能不会返回任何内容。但是,如果发生了完全超出范围的事情,那么应该有一个异常(exception)。

关于c# - 区分相同类型的异常,例如使用 Enumerable.Single(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com