#if - Wie richtig verwenden und für welche Zwecke ist es zu gebrauchen?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    #if - Wie richtig verwenden und für welche Zwecke ist es zu gebrauchen?

    Ich rede von diesem if statement hier:


    Wozu kann es verwendet werden, und wie kann man es ambesten verwenden?
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    Das fällt unter Compilerschalter. Du kannst damit leicht umschalten, ob Du bestimmt Codebereiche kompilieren willst oder nicht. Gut, Dein Beispiel ist nicht sinnvoll, weil der Code immer kompiliert wird, aber das hier z.B.:

    VB.NET-Quellcode

    1. #If DEBUG Then
    2. Private List As New List(Of String)
    3. #Else
    4. Private List As New List(Of integer)
    5. #End If

    Nicht sinnvoll, aber möglich
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @ClonkAndre So was:
    Nicht #if true sondern #if CONDITION:
    Spoiler anzeigen

    C#-Quellcode

    1. // oberhalb der using-Anweisungen
    2. #if DEBUG
    3. #define DRAG_DROP // kann auskommentiert werden
    4. #endif
    5. void KONSTRUKTOR()
    6. {
    7. // ...
    8. #if DRAG_DROP
    9. this.ToolStripMain.DragEnter += new System.Windows.Forms.DragEventHandler(this.ToolStripMain_DragEnter);
    10. this.ToolStripMain.DragDrop += new System.Windows.Forms.DragEventHandler(this.ToolStripMain_DragDrop);
    11. this.ToolStripMain.AllowDrop = true;
    12. #endif
    13. // ...
    14. }
    15. #if DRAG_DROP
    16. /// <summary>
    17. /// Zur automatischen Konvertierung von Versionen,
    18. /// nur in der DEBUG
    19. /// </summary>
    20. private void ToolStripMain_DragEnter(object sender, DragEventArgs e)
    21. {
    22. if (e.Data.GetDataPresent(DataFormats.FileDrop))
    23. {
    24. e.Effect = e.AllowedEffect;
    25. }
    26. }
    27. /// <summary>
    28. /// Zum Test auf automatische Konvertierbarkeit alter Versionen,
    29. /// nur im DEBUG-Mode
    30. /// </summary>
    31. private void ToolStripMain_DragDrop(object sender, DragEventArgs e)
    32. {
    33. e.Effect = DragDropEffects.None;
    34. if (!e.Data.GetDataPresent(DataFormats.FileDrop))
    35. {
    36. return;
    37. }
    38. // was tun
    39. }
    40. #endif
    41. }

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ClonkAndre schrieb:

    Wozu kann es verwendet werden, und wie kann man es ambesten verwenden?
    ich benutze es um mehrzeilige Kommentare zu schreiben, ohne dass VS mir da irgendwelche Zeichen in den Editor generiert die ich nicht haben will.

    C#-Quellcode

    1. namespace JsonEdit
    2. {
    3. static class Program
    4. {
    5. [STAThread]
    6. static void Main()
    7. {
    8. /* bjekla bjekla bjekla bjekla bjekla bjekla bjekla bjekla
    9. * bjekla bjekla bjekla bjekla bjekla bjekla
    10. * bjekla bjekla bjekla bjekla bjekla
    11. */
    12. #if false
    13. bjekla bjekla bjekla bjekla bjekla bjekla bjekla bjekla bjekla
    14. bjekla bjekla bjekla bjekla bjekla bjekla bjekla bjekla bjekla
    15. bjekla bjekla bjekla bjekla bjekla bjekla bjekla bjekla
    16. #endif
    VS lässt mich mit Einrückung in Ruhe und mit den *. So hab ich mehr Bildschrimbreite zum schreiben, und wenn ich meinen Text umbreche, oder zwei Zeilen vereinige kann ich das einfach tun, ohne die lausigen Spaces und * dazwischenzukriegen.

    eine andere Variante #elseif-ketten:

    C#-Quellcode

    1. #if true
    2. var arr = new JArray();
    3. JToken tk;
    4. tk = default(int);
    5. arr.Add(tk);
    6. int i = 2;
    7. #elif true
    8. var arr = new JArray();
    9. JToken2 tk;
    10. tk = default(int);
    11. arr.Add(tk);
    12. int? i = 2;
    13. #elif true
    14. var arr = new JArray();
    15. JToken2 tk;
    16. tk = null;
    17. arr.Add(tk);
    18. int? i = 2;
    19. #elif true
    20. #endif
    Nur der oberste Block wird kompiliert. So kann ich Varianten desselben Codes anlegen, und mit einem Maus-Drag eine andere Variante nach oben schieben.
    Brauch ich immer als Zwischenspeicher, wenn ich Code ummodel.