我在使用C#中的Code Contracts,但是我有点好奇应该在 userMessage
参数中输入什么。以下是一个简短的示例。
我在代码中有以下断言:
Contract.Assert(IsValidReferenceData(refData));
这个信息不会被展示给用户,但是为了我和其他开发者/维护者更好地理解异常情况,最好提供一个英文信息描述。
一开始我认为
Contract.Assert(IsValidReferenceData(refData), "Payment Reference is not valid");
然后我想到,userMessage
与布尔条件完全相反,所以我重新写成了:
Contract.Assert(IsValidReferenceData(refData), "Payment Reference is valid");
因此,消息和条件是相同的。然而,当人们看到异常报告时,这会让他们感到困惑,然后想:“等等,如果引用是有效的,为什么会抛出异常?” 最后,我可以想到为什么不发表一个中立的声明,说明必须是真实的:
Contract.Assert(IsValidReferenceData(refData), "Payment Reference must be valid");
以上哪种方式是最佳实践?我想要确保消息传递正确,因为我计划在各个地方使用断言来防止数据异常,并且我正在启用运行时检查。