#if Nie debuguj w języku C #?

127

Mam wiersz w kodzie VB:

#if Not Debug

które muszę przekonwertować, a nie widzę tego w C #?

Czy jest coś równoważnego, czy jest jakieś obejście?

user278618
źródło

Odpowiedzi:

239

Musisz użyć:

#if !DEBUG
    // Your code here
#endif

Lub, jeśli twój symbol jest rzeczywiście Debug

#if !Debug
    // Your code here
#endif

Z dokumentacji można skutecznie traktować DEBUGjako wartość logiczną. Możesz więc wykonywać złożone testy, takie jak:

#if !DEBUG || (DEBUG && SOMETHING)
CodeNaked
źródło
15

Po prostu wiesz, co się tutaj dzieje, #ifjest wyrażeniem przetwarzania wstępnego i DEBUGsymbolem kompilacji warunkowej. Oto artykuł MSDN zawierający bardziej szczegółowe wyjaśnienie.

Domyślnie w konfiguracji debugowania program Visual Studio sprawdzi opcję Zdefiniuj stałą DEBUG we właściwościach kompilacji projektu. Dotyczy to zarówno języka C #, jak i VB.NET. Jeśli chcesz oszaleć, możesz zdefiniować nowe konfiguracje kompilacji i zdefiniować własne symbole kompilacji warunkowej. Typowy przykład, kiedy to widzisz, to:

#if DEBUG
    //Write to the console
#else
    //write to a file
#endif
Aaron Daniels
źródło
10

Na wypadek, gdyby to pomogło komuś innemu, oto moja odpowiedź.

To nie zadziała poprawnie:

#if !DEBUG
     // My stuff here
#endif

Ale to zadziałało:

#if (DEBUG == false)
     // My stuff here
#endif
Vaccano
źródło
3
Mogło być dokładnie w dniu, w którym to opublikowano, ale przynajmniej na VS 2015! DEBUG działa zgodnie z oczekiwaniami
Ole Albers
5

Myślę, że coś takiego zadziała

 #if (DEBUG)
//Something
#else
//Something
#endif
KhanZeeshan
źródło
5
W przypadku tych #ifinstrukcji warunkowych samo zapisywanie nawiasów nie jest wymagane . Można to napisać#if DEBUG
atconway
0
     bool isDebugMode = false;
#if DEBUG
     isDebugMode = true;
#endif
    if (isDebugMode == false)
    {
       enter code here
    }
    else
    {
       enter code here
    }
Luiz Flavio Cavalcanti da Silv
źródło
5
To zła odpowiedź, ponieważ używa logiki czasu wykonywania do obsługi tego, co można zrobić w czasie kompilacji.
antiduh
Czas projektowania szablonów T4 i tym podobnych będzie od czasu do czasu potrzebować tego rodzaju rzeczy.
StingyJack