gpt4 book ai didi

c# - 如果没有 c# 异常,如何处理和测试流控制?

转载 作者:行者123 更新时间:2023-11-30 14:08:52 25 4
gpt4 key购买 nike

处理和测试如果没有异常则无效的方法的流程控制的正确方法是什么?我已经看到 Microsoft 不推荐这种做法,那么正确的方法是什么?

这就是我如何处理不应在我的方法中接受的参数:

    public void RentOutCar(ReservationInfo reservationInfo) 
{
try
{
if (string.IsNullOrEmpty(reservationInfo.ReservationNumber) || string.IsNullOrWhiteSpace(reservationInfo.ReservationNumber))
{
throw new ArgumentException("Reservation Number is null or empty.");
}
if (reservationInfo == null)
{
throw new ArgumentNullException("Null Reservation info.");
}
if (reservationInfo.Car == null)
{
throw new ArgumentNullException("No car registered to rent.");
}
if (reservationInfo.RentalDatetime == DateTime.MinValue || reservationInfo.RentalDatetime == DateTime.MaxValue)
{
throw new ArgumentException("Rental Date has an unreal value.");
}
if (reservationInfo.Car.Mileage <0)
{
throw new ArgumentOutOfRangeException("Mileage can't be less than 0.");
}

reserverationsRegister.ReservationsDone.Add(reservationInfo);
}
catch (Exception)
{
throw;
}

}

最佳答案

这不是微软说 you should not control flow with exceptions 的意思.

While the use of exception handlers to catch errors and other events that disrupt program execution is a good practice, the use of exception handler as part of the regular program execution logic can be expensive and should be avoided.

换句话说,当 try block 中的代码可能抛出并代表合法的程序逻辑时,您不应该抛出(并随后捕获)异常。

一个用异常控制流程的人为示例可能如下所示:

int x = GetUserInput();
try
{
MustAcceptPositiveInput(x);
}
catch (InputIsNonPositiveException)
{
MustAcceptNonPositiveInput(x);
}

等效的“正确”代码可能如下所示:

int x = GetUserInput();
if (x > 0)
{
MustAcceptPositiveInput(x);
}
else
{
MustAcceptNonPositiveInput(x);
}

异常应保留用于异常情况,即那些不属于预期程序执行的部分。它会产生更具可读性、更少令人惊讶且性能更高的代码。

您在代码中所做的一切都很好(除了冗余的 try-catch 和@Clay 提到的错误测试顺序),您正在验证异常值的输入,那些您的代码 不打算处理

关于c# - 如果没有 c# 异常,如何处理和测试流控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32844343/

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