我目前正在C#开发一个小型AI框架(遗传算法/神经网络),用于大学项目。你如何在.NET中的算法代码中声明?
我首先关心的是开发一个可重用的框架,所以我设计的一切都是非常模块化的。我知道我为此付出了代价(性能),但是我觉得我有更多的收获而不是失败(最好让代码慢两倍,不得不失去两倍的时间,之后尝试找到不可能的发现错误并失去很多时间试图添加新的东西,很难引入一个单一的代码块)。
我想在我的代码的不同部分,断言,基本上有很多检查。检查是否运行方法XI确实处于正确的状态等等。这些断言在开发时很有用,但我希望它们远离发布代码(也就是说,当我决定要离开时这在夜间工作以获得我的最终研究结果)。
我可以看到完成这几个方面:
- System.Diagonists.Assert家庭的方法。
- 代码契约/
- 有如果(X)再抛通过#如果DEBUG包围InvalidStateException()#ENDIF
,你会怎么做呢?为什么?
我也知道单元测试(我正在使用它们),但我也想在代码上有一些断言。
不要代码合同以类似的方式工作吗?我有想法,你可以完全关闭他们在释放模式,或类似的东西。 – 2010-11-19 06:11:08
也许吧。老实说,我不熟悉它。我答案中的技巧是我使用的技术,所以我想我会分享它。我不能说代码合同是好还是差。 – cdhowie 2010-11-19 06:12:08
我会与什么cdhowie说。代码合同提供了更多,但可能不是你所需要的。所以我认为正确的工具是使用Conditional属性修饰的方法,而不是内联#if,#else或Debug.Asset()将内联代码混乱。 – 2010-11-19 06:54:27