【发布时间】:2021-11-10 20:11:16
【问题描述】:
我可以对我设置的条件使用 try-catch-throw,而不是实际错误吗?例如,
int x = 0;
if (x > 0)
{ throw new Exception("X can't be more than 0!");}
所以 x 大于 0 并没有技术上的错误,但这是我所拥有的条件。另外,我知道 throw 会终止程序,但之后我需要程序继续运行。
编辑:这是我正在尝试实现的代码的一部分:
public bool CheckIfEligible()
{
if (DateTime.Compare(DateTime.Now, this.startTime) > 0)
{
Console.WriteLine("\n" + "ERROR: choose a later date");
return false;
}
// bunch of other conditions here...
else
return true;
}
【问题讨论】:
-
当然可以。调用代码可以像捕获任何其他异常一样捕获它。这是
ArgumentOutOfRangeException等异常的标准用例。 -
换成 try...catch
-
是的;去尝试一下!在 Q/A 堆栈的 cmets 中讨论这个是没有意义的 :)
-
首先,是的,你绝对可以。虽然 CPU 不会在 x 大于 0 时融化,但您有一个合同中断,因为您不期望也不允许 x 大于 0。在这种情况下,这是绝对正确的抛出异常。但是,对于这种特殊类型的违约行为,我建议您使用
ArgumentOutOfRangeException。 -
为了挽救这个问题,发布一个您实际运行的代码的最小完整示例。