Mas*_*tic 17 c# error-handling exception code-contracts
我想知道我是应该抛出异常还是打电话 Contract.Requires<TException>
例如:
public static void Function(String str)
{
if (str == null) throw new ArgumentNullException("str", "Input string cannot be null.");
// ...
}
Run Code Online (Sandbox Code Playgroud)
VS
public static void Function(String str)
{
Contract.Requires<ArgumentNullException>(str != null, "Input string cannot be null.");
// ...
}
Run Code Online (Sandbox Code Playgroud)
由于Contract.Requires<TException>不需要CONTRACTS_FULL符号,我可以将其保留在我的发布版本中.
这是我的考虑:
Con:您无法调用自定义异常类型构造函数的重载版本.根本无法将其他参数传递给构造函数.
Pro:静态工具支持(例如通知调用者违反合同).
我应该使用哪一种,以及哪种情况?
小智 8
之间的基本平衡if-then-throw,并Requires<TException>为用户CodeContract指南中记录的是你如何建立与您的发行位.
案例1:你只使用if-then-throw,没有Requires<TException>.在这种情况下,您可以在不运行dll/exe上的合同工具的情况下构建发布位.优点是您具有更快的构建,并且没有工具引入错误的风险.第二个优点是团队成员可以选择不使用CodeContract工具.缺点是您没有获得需求的合同继承,并且您的合同不一定对工具可见(除非您使用EndContract).您可以使用汇编模式指定此案例:自定义参数验证
案例2:您决定始终在发布位上运行CodeContract工具.这使您可以使用Requires<TException>并获得合同的继承,包括接口的检测等.您的合同是清晰的并且可以识别工具.缺点是每个构建代码的人都必须安装CodeContracts工具.您可以使用汇编模式指定此案例:"合同"属性窗格中的"标准".
希望这清楚的事情.
| 归档时间: |
|
| 查看次数: |
6542 次 |
| 最近记录: |