检查逻辑的断言应始终为真

断言用于不执行输入参数的测试,而是用于验证程序流是否为核心 - 即,你可以在某个特定时间点对你的代码做出某些假设。换句话说:用 Debug.Assert 进行的测试应该总是假设测试的值是 true

Debug.Assert 仅在 DEBUG 构建中执行; 它是从 RELEASE 版本中过滤掉的。除单元测试外,它必须被视为调试工具,而不是代码契约或输入验证方法的替代。

例如,这是一个很好的断言:

var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);

这里断言是一个很好的选择,因为我们可以假设 RetrieveSystemConfiguration() 将返回一个有效值,并且永远不会返回 null。

这是另一个很好的例子:

UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;

首先,我们可以假设 RetrieveUserData() 将返回一个有效值。然后,在使用 Age 属性之前,我们验证用户年龄严格为正的假设(应始终为真)。

这是断言的一个坏例子:

string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");

断言不适用于输入验证,因为假设此断言始终为真是不正确的。你必须使用输入验证方法。在上面的情况中,你还应该首先验证输入值是否为数字。