我不是以英语为母语的人,所以对我而言Debug.Assert
方法有点奇怪,对我来说,验证一个条件,实际上验证了这种情况的反面。
断言 =提前,确认, 辩论,证明,aver,索赔, 宣告,宣传,发音,提出,说, 压力等
我期待,
Debug.Assert(Me.Member Is Nothing, "Member Is Nothing!")
表现得像
Affirm(condition, "Message") ' conditional message
然而,实际上我应该做
Debug.Assert(Me.Member Is Nothing, "Member Is NOT Nothing!")
Affirm(NOT condition, "Message") ' counter-conditional message
我错过了什么吗?
你看到这是否直观?
答案 0 :(得分:3)
你的语法是正确的,但是这样想吧
Debug.Assert(Me.Member Is Nothing, "Member assert.")
这将断言Me.Member is Nothing
,并且只会在不是时提醒您。
有点像你是在争论,你说“地球是75%的水”。没有太多人会与你争论。但如果你说“地球主要由巧克力蛋糕组成。”人们会争辩。
Assert也是如此,如果断言为真,则不需要调试器说出来。如果它是假的,它需要让你知道。
顺便说一下,我是英语母语人士,我写过断言的前几次,我把它们写回来了:)
答案 1 :(得分:1)
Debug.Assert
的API确实有点反直觉。我花了很长时间才习惯这个。在我的脑海中,Assert
翻译为:
if (condition)
{
Fail(message);
}
但事实上,它转化为:
if (condition)
{
// Success
}
else
{
Fail(message);
}
或简称:
if (!condition)
{
Fail(message);
}
诀窍是布尔表达式应为true 而不是来断言。不过我觉得这个设计已经被选中了,因为这个API已经为C ++开发人员提供了很长时间,并且交换它会让他们眼花缭乱。
答案 2 :(得分:0)
关键是你对Assert
方法的假设有点偏离标准。
我的意思是,该函数检查条件是否有效,即TRUE。所以它肯定了条件。
如果不满足条件,即FALSE,则显示消息。
答案 3 :(得分:0)
使用Assert
,验证代码中的逻辑。 (可选)如果断言失败,您可以添加消息以帮助调试。
int i = 3;
i *= 3;
assert(i == 9, "Strange arithmetic failure");
(抱歉C ++代码。)
答案 4 :(得分:0)
你没有遗漏任何东西。也许设计师应该调用方法“IfNot”而不是“Assert”。我想他们并不是说Assert调用被读作“if”语句。 “断言”作为检查值的方法名称在C / C ++中也有很长的历史,所以我猜他们想在C#中使用相同的名称。