Нет, весь вызов, включая оценку выражения, удаляется из компиляции, если символ не определен. Это очень важно - если в выражении есть какие-либо побочные эффекты, они не произойдут , если DEBUG не определен. Вот короткая, но полная программа для демонстрации:
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
int i = 0;
Debug.Assert(i++ < 10);
Console.WriteLine(i);
}
}
Если определено DEBUG
, выводится 1, в противном случае выводится 0.
Из-за такого поведения в условно скомпилированном методе не может быть параметра out
:
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
int i ;
MethodWithOut(out x);
}
[Conditional("FOO")]
static void MethodWithOut(out int x)
{
x = 10;
}
}
Это дает ошибку:
Test.cs (13,6): ошибка CS0685: условный член 'Test.MethodWithOut (out int)' не может
есть выходной параметр