与Contract.Requires一起抛出异常?我想知道我是否应该抛出异常或调用Contract.Requires例如:publicstaticvoidFunction(Stringstr){if(str==null)thrownewArgumentNullException("str","Inputstringcannotbenull.");//...}VSpublicstaticvoidFunction(Stringstr){Contract.Requires(str!=null,"输入字符串不能为空。");//...}因为Contract.Requires不需要CONTRACTS_FULL符号,所以我也可以将它保留在我的发布版本中。以下是我的考虑:缺点:您不能调用自定义异常类型构造函数的重载版本。根本没有办法将额外的参数传递给构造函数。Pro:静态工具支持(例如通知调用者违约)。我应该使用哪一个,在什么情况下使用?CodeContract用户指南中记录的if-then-throw和Requires之间的基本权衡是如何使用发布位进行构建。情况1:您只使用if-then-throw,不需要Requires。在这种情况下,您可以在不在dll/exe上运行合同工具的情况下构建发布位。优点是构建速度更快,并且没有工具引入错误的风险。第二个优势是团队成员可以选择不使用CodeContract工具。缺点是您不会获得需求的契约继承,并且您的契约不一定对工具可见(除非您使用EndContract)。您可以使用汇编模式指定此案例:自定义参数验证案例2:您决定始终在发布位上运行CodeContract工具。这允许您使用Requires并获得契约的继承,包括接口的检测等。您的契约是干净的并且工具可识别。缺点是构建代码的每个人都必须安装CodeContracts工具。您可以使用汇编程序模式指定这种情况:“合同”属性窗格中的“标准”。希望这能解决问题。我不确定这两种方法之间是否有任何惊天动地的差异,但我更喜欢合同的原因有两个......1)代码更清晰,因为你在方法的顶部写了一条语句,显示了The该方法所基于的假设。如果假设被违反,代码将不会阻塞。2)当您编写代码时,您会受益于VisualStudio采用代码合同并为您提供有关要调用的方法的提示。这有助于确保您向方法发送有效参数,而不必跳转到方法定义来检查那里的代码。代码编译并运行后,我看不出有任何重大差异。希望这可以帮助。以上就是C#学习教程:ThrowingexceptionsandContract.Requires?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
