代码之家  ›  专栏  ›  技术社区  ›  James Newton-King dbc

在.NET中断言参数和值的前置条件和后置条件的最佳方法是什么?

  •  4
  • James Newton-King dbc  · 技术社区  · 17 年前

    我最近一直在考虑契约式设计,我想知道人们认为在.NET中,什么是断言价值的前置条件和后置条件的最佳方式? i、 e.验证方法的参数值。

    有些人建议使用Debug.Assert,而有些人则讨论使用if语句并引发异常。每种方法的优缺点是什么?

    您建议使用哪些框架?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Jeff Moser    17 年前

    当.NET4.0发布时,我们最终将使用代码契约。然而,在我们目前的生产代码中,我们已经成功地使用了“Guard”类以及生成异常的常用方法。

    有关详细信息,请参阅 my post about this .

        2
  •  3
  •   Cameron MacFarland    17 年前
        3
  •  1
  •   Jeff Yates    17 年前

    我更喜欢异常而不是断言,因为如果它应该是这样的,而不是这样的,我想知道它,这样我就可以修复它,而且我们在调试模式下得到的覆盖率与实际使用或覆盖率相差甚远,所以仅使用debug.Assert是不够的。

    使用异常意味着无论何时发生、调试或发布,都会看到契约被破坏,但这也意味着发布版本包含更多的检查和代码。

    您可以使用中间的方法,并使用Trace将前置和后置条件跟踪到某种应用程序日志中,您可以使用这些日志来调试问题。但是,您需要一种获取这些日志的方法来了解用户遇到的问题。还有可能将其与异常结合起来,这样您就可以针对更严重的问题获得异常。

        4
  •  1
  •   JML    15 年前

    您可以在以下位置查看fluent框架: http://conditions.codeplex.com/

        5
  •  0
  •   Hao Wooi Lim    17 年前

    Spec#是实现这一点的方法,它是C#的超集。现在你有了“ Code Contracts ,这是Spec#的语言无关版本,因此现在可以在VB.NET中使用代码契约。

    推荐文章