gpt4 book ai didi

c# - 异常处理——这是好的做法吗?

转载 作者:太空狗 更新时间:2023-10-30 00:18:44 26 4
gpt4 key购买 nike

我想知道我要做的是好事还是坏事。我有那个课:

public class Element : IElement
{
public float? Max { get; private set; }

public float? Min { get; private set; }

public float? Average { get; private set; }

public bool HasValue { get; private set; }


public void SetRange(float? min, float? max)
{
if (min >= max)
{
throw new WrongElementValueException("Min must be greater than max!");
}
else if (min < 0f || max < 0f)
{
throw new WrongElementValueException("Min/max must be greater than 0!");
}
else if (min > 100f || max > 100f)
{
throw new WrongElementValueException("Min/max must be lesser than 0!");
}
else
{
Min = min;
Max = max;
Average = (min + max)/2f;
HasValue = true;
}
}
}

用户将使用 SetRange() 方法设置值。但是他有一些限制,比如 Min 必须大于 Max,并且两者都不能大于 100 或小于 0。

我应该在这个地方使用那些异常(exception)吗?还是有更好的方法来处理错误的用户输入?我希望我的问题不是笼统的。

最佳答案

这是一种适当的做法,是的。

虽然我想消费代码会期待 ArgumentException 而不是这种异常类型,但这可能是一个相对次要的问题。

当输入无效,并且对象无法以其他方式有意义地继续时,抛出异常是一种适当且预期的响应。正确使用对象、处理错误、向用户报告等都取决于消费代码。

另一种方法是让这个对象“试着找出要做什么”,这通常会导致一些非常糟糕的编码实践。例如……

  • 假设您想要返回一条错误消息而不是抛出异常。如果使用代码不检查该错误消息怎么办?该对象将处于未知和无效状态,并可能悄悄地引入错误。而如果使用代码不检查异常,那么程序显然会失败,需要进行适当的更正。与微妙和未被注意的失败相比,明显和明显的失败很多更容易支持。
  • 假设您想要“向用户显示一条消息”。这将需要将该对象与表示层紧密耦合,这违背了面向对象的原则,并使代码非常僵硬且难以维护。

这个对象做一件事,而且只做那一件事。如果它的调用方式使其不能做那件事,则异常是一种预期且适当的失败条件。

关于c# - 异常处理——这是好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050121/

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