Code Kürzer

  • WPF

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Schmittmuthelm.

    Hi Leute ,

    also mein Code funktioniert wollte nur mal fragen ob man den einfacher schreiben kann ?
    Was der Code macht das ist einfach eine Schichtuhr für Frühschicht von 6-14 Uhr, Spät 14-22 Uhr , Nacht 22-6 Uhr jedes mal wenn sich die Schicht ändert wird dass passende Anzeige element angezeigt :).

    C#-Quellcode

    1. private void Schichten(object sender, EventArgs e)
    2. {
    3. //Aktuelles Datum und die Uhrzeit
    4. DateTime localDate = DateTime.Now;
    5. datatimeactually.Text = localDate.ToString("G");
    6. //Welche Shcicht aktiv ist
    7. TimeSpan actualTime = DateTime.Now.TimeOfDay;
    8. TimeSpan frühstart = new TimeSpan(6, 0, 0);
    9. TimeSpan frühende = new TimeSpan(14, 0, 0);
    10. TimeSpan spätstart = new TimeSpan(14, 0, 0);
    11. TimeSpan spätende = new TimeSpan(22, 0, 0);
    12. TimeSpan nachtstart = new TimeSpan(22, 0, 0);
    13. TimeSpan nachtende = new TimeSpan(6, 0, 0);
    14. if (actualTime >= frühstart && actualTime <= frühende)
    15. {
    16. shiftwindowfrüh.Visibility = Visibility.Visible;
    17. shiftwindowspät.Visibility = Visibility.Hidden;
    18. shiftwindownacht.Visibility = Visibility.Hidden;
    19. //die aktuelle Zeit liegt zwischen deinen beiden Grenzen
    20. }
    21. else if (actualTime >= spätstart && actualTime <= spätende)
    22. {
    23. shiftwindowfrüh.Visibility = Visibility.Hidden;
    24. shiftwindowspät.Visibility = Visibility.Visible;
    25. shiftwindownacht.Visibility = Visibility.Hidden;
    26. //die aktuelle Zeit liegt zwischen deinen beiden Grenzen
    27. }
    28. else if (actualTime >= nachtstart && actualTime <= nachtende)
    29. {
    30. shiftwindowfrüh.Visibility = Visibility.Hidden;
    31. shiftwindowspät.Visibility = Visibility.Hidden;
    32. shiftwindownacht.Visibility = Visibility.Visible;
    33. //die aktuelle Zeit liegt zwischen deinen beiden Grenzen
    34. }
    35. //die aktuelle Zeit liegt NICHT zwischen deinen beiden Grenzen
    36. }

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    C#-Quellcode

    1. //[…]
    2. if (actualTime >= frühstart && actualTime <= frühende) ShowOnly(shiftwindowfrüh);
    3. else if (actualTime >= spätstart && actualTime <= spätende) ShowOnly(shiftwindowspät);
    4. else if (actualTime >= nachtstart && actualTime <= nachtende) ShowOnly(shiftwindownacht);
    5. }
    6. private void ShowOnly(UIElement UIElement)
    7. {
    8. UIElement[] UIElements = {shiftwindowfrüh, shiftwindowspät, shiftwindownacht};
    9. foreach (UIElement elem in UIElements)
    10. elem.Visibility = elem == UIElement ? Visibility.Visible : Visibility.Hidden;
    11. }

    so aus'm Bauch heraus
    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.
    Das funktioniert Perfekt!
    Allerdings hätte ich eine Frage zu den Abteil:

    C#-Quellcode

    1. (UIElement elem in UIElements)
    2. elem.Visibility = elem == UIElement ?


    Ich verstehe nicht ganz genau was du da machtst also das mit dem elem in UIElements und das = elem == UIElement ? das verstehe ich auch nicht so ganz.

    Ist das so wenn du elem == UIElements einfach nur abfragst ob grad ein Element davon einen boolischen True wert hast ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrLaTuNiX“ ()

    Ist quasi die Kurz-Schreibweise für:

    C#-Quellcode

    1. if(elem == UIElement){
    2. elem.Visibility = Visibility.Visible;
    3. }
    4. else{
    5. elem.Visibility = Visibility.Hidden;
    6. }


    Hinter dem ? steht der Wert, welcher zugewiesen wird, wenn die Abfrage true ergibt. Hinter dem : entsprechend der Wert, wenn die Abfrage false ergibt.
    Die Schreibweise kann eigentlich beliebig erweitert werden, wird dann aber schnell unübersichtlich. Für so einfache Sachen wie in deinem Beispiel ist das als Einzeiler durchaus vorzuziehen

    Oki danke für die Info was meinst du aber mit der schreibweise kann man erweitern ? also hinter den True und nachdem False ist doch alles gesagt oder meinst du mann kan wieder ? //true und dann wieder : //false richtig ?

    und merke grad das ich das noch fragen wollte also mit dem

    C#-Quellcode

    1. (UIElement elem in UIElements)


    das UIElement ist extra da für die Visibillity richtig ?
    weil hätte ich da eine Zahl müsste ich Int nehmen vor dem elem richtig ?
    @Schmittmuthelm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrLaTuNiX“ ()

    Ich vermute das Missverständnis kommt von der ungünstigen Benennung der Argumente. Vielleicht ists so besser verständlich:

    C#-Quellcode

    1. private void ShowOnly(UIElement element)
    2. {
    3. UIElement[] uiElements = {shiftwindowfrüh, shiftwindowspät, shiftwindownacht};
    4. foreach (UIElement otherElement in uiElements)
    5. otherElement.Visibility = otherElement == element ? Visibility.Visible : Visibility.Hidden;
    6. }​

    MrLaTuNiX schrieb:

    was meinst du aber mit der schreibweise kann man erweitern ?


    Erweitern im Sinne von weiteren else if() Blöcken.
    Mal ein kleines Beispiel zur Veranschaulichung.

    C#-Quellcode

    1. private int BeispielLang(int wert)
    2. {
    3. int ergebnis;
    4. if (wert == 0)
    5. {
    6. ergebnis = 10;
    7. }
    8. else if (wert == 1)
    9. {
    10. ergebnis = 20;
    11. }
    12. else if (wert == 2)
    13. {
    14. ergebnis = 30;
    15. }
    16. else
    17. {
    18. ergebnis = 0;
    19. }
    20. return ergebnis;
    21. }
    22. private int BeispielKurz(int wert)
    23. {
    24. return wert == 0 ? 10 : wert == 1 ? 20 : wert == 2 ? 30 : 0;
    25. }