檢查邏輯的斷言應始終為真

斷言用於不執行輸入引數的測試,而是用於驗證程式流是否為核心 - 即,你可以在某個特定時間點對你的程式碼做出某些假設。換句話說:用 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");

斷言不適用於輸入驗證,因為假設此斷言始終為真是不正確的。你必須使用輸入驗證方法。在上面的情況中,你還應該首先驗證輸入值是否為數字。