Per chi ha voglia di un pizzico di surreale, ecco uno snippet che mi ha fatto impazzire...
// foo.cs
//
// csc /d:DUMMY foo.cs # stampa False
// csc foo.cs # stampa True
using System;
using System.Diagnostics;
class Test
{
[Conditional("DUMMY")]
static void Dummy(double x)
{
x = x;
}
static void Main()
{
double x = Math.Pow(double.Epsilon, 2);
Dummy(x);
Console.WriteLine(0 < x && x < double.Epsilon);
}
}
Questo codice stampa False se compilato col simbolo DUMMY e True in caso contrario, cioè l'espressione:
0 < x && x < double.Epsilon
ha valori diversi in base al fatto che Dummy (che in teoria non dovrebbe far nulla) venga chiamato prima o no...
Non ho ancora capito perché.