#if/#endif 可產生不同建置輸出,但濫用導致:
[Conditional("DEBUG")]
private void DebugOnlyMethod() { ... }
編譯器識別此屬性:若符號未定義,直接移除所有呼叫指令(含引數評估),方法本體保留於組件中但無人呼叫。
傳統寫法:
private void CheckState()
{
#if DEBUG
Trace.WriteLine("Entering CheckState");
// ... 驗證邏輯
Trace.WriteLine("Exiting CheckState");
#endif
}
問題:Release 建置仍保留空方法呼叫,有微小開銷;且若不小心在 #if 內放有副作用程式碼會產生 Bug。
[Conditional("SYMBOL")]Debug.AssertTrace.WriteLine