Если вы компилируете без определенного символа препроцессора DEBUG, любые вызовы Debug.Assert будут пропущены в скомпилированном коде.
Если вы посмотрите документы для Debug.Assert , вы увидите, что в объявлении указано [ConditionalAttribute("DEBUG")]
. ConditionalAttribute используется, чтобы решить, действительно ли вызов метода фактически передан или нет во время компиляции.
Если условный атрибут означает, что вызов не выполнен, оценка любого аргумента также не учитывается. Вот пример:
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
Foo(Bar());
}
[Conditional("TEST")]
static void Foo(string x)
{
Console.WriteLine("Foo called");
}
static string Bar()
{
Console.WriteLine("Bar called");
return "";
}
}
Когда определен TEST, вызываются оба метода:
c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe
Bar called
Foo called
Когда TEST не определен, не вызывается ни один из них:
c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe