如果没有c#异常,如何处理和测试流量控制?
如果没有异常,那么处理和测试无效方法的流控制的正确方法是什么?我已经看到微软不推荐这样的做法,那么正确的方法是什么?
这就是我如何处理我的方法中不应该接受的参数: 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时的意思.
换句话说,在try块中的代码可能抛出并表示合法的程序逻辑的情况下,不应抛出(并随后捕获)异常. 一个用例外控制流程的设计示例可能如下所示: int x = GetUserInput(); try { MustAcceptPositiveInput(x); } catch (InputIsNonPositiveException) { MustAcceptNonPositiveInput(x); } 等效的“正确”代码可能如下所示: int x = GetUserInput(); if (x > 0) { MustAcceptPositiveInput(x); } else { MustAcceptNonPositiveInput(x); } 例外情况应保留用于特殊情况,即不属于预期程序执行情况的情况.它会产生更具可读性,更少令人惊讶且性能更高的代码. 您在代码中所做的事情很好(除了@Clay提到的冗余try-catch和错误的测试顺序),您正在验证特殊值的输入,即您的代码无意处理的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- reactjs – 如何在React Native中的无状态功能组件中扩展本
- ruby-on-rails – 宝石安装导轨无法完成
- 实战react技术栈+express前后端博客项目(8)-- 前端管理界
- c – 将“this”改为std :: shared_ptr
- oracle11g – JBoss AS 7.1.1下的奇怪的Oracle 11g JDBC驱动
- XML在JAVA项目中的作用
- Extjs学习笔记3-多功能编辑框
- u-boot-2009.08在mini2440上的移植(二)---增加nor flash功
- oracle pl / sql数组
- oracle11gR2使用exp导出命令时报EXP-00011错误的解决方法