gpt4 book ai didi

c# - 如何在库实现中冒泡/处理 C# 异常

转载 作者:行者123 更新时间:2023-11-30 13:48:53 25 4
gpt4 key购买 nike

从库中提取异常的最佳方法是什么?当我实现一个接口(interface)时,用关于我的实现细节的异常来干扰调用方是好还是坏的做法?我有以下实现,其中每个实现错误都隐藏在调用方之外。在我看来,它是实现关注点分离的最干净的方式。但我到处都读到你需要冒出未触及的异常。

public class OneException : Exception
{
public OneException()
{
}

public OneException(string message): base(message)
{
}

public OneException(string message, Exception innerException)
: base(message, innerException)
{
}
}

还有我的库实现:

public class MyLib : IMyLib
{
public int Divide(int a, int b)
{
try
{
if (b == 1) throw new OneException();
return a / b;
}
catch (OneException e)
{
throw new ApplicationException("Please do not divide by 1", e);
}
catch (Exception e) // divide by zero and others
{
throw new ApplicationException("Oops", e);
}
}
}

最佳答案

符合Single Responsibility Principle ,您应该处理您的图书馆应该做的事情(如果可能)。否则,你应该让调用者来处理它。

在您的示例中,您正确地抛出了被零除异常。处理这不是您的图书馆的责任(除非您将其宣传为“安全”的划分方法)。该错误是由不正确的客户端输入引起的,因此应该由客户端来处理。

然而,您的 OneException 将是一个不寻常的抛出异常。为什么客户端不能除以一个?它当然不会造成伤害。这大概是一个人为的例子,但你不应该抛出异常,除非确实存在内部无法解决的问题。如果有人想除以一,为什么不允许他们这样做?

良好的异常处理会通知客户他们的输入问题和/或系统故障,而不是您的逻辑中的错误。

关于c# - 如何在库实现中冒泡/处理 C# 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010036/

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