Switch-Ausdruck wird nicht angenommen



  • OrginellerName schrieb:

    Oh man. Das war ja nun nur noch vereinfachter.

    Aber zu weit vereinfacht.

    Ich kann ja auch den key der Dictionary als klasse definieren die einen Bereich hat.

    Dann mach doch mal. Du müsstest sowas ja schon fertig herumliegen haben, immerhin meinst du ja es sollte "verboten" werden, das überhaupt anders zu lösen.

    Aber du hast recht was gibts da noch zu diskutieren.

    Das bezieht sich darauf, dass deine Listenlösung dein "Dictionary" sein soll. Ich mag keine Wortklaubereien und versuche gerne solche Diskussionen abzuwürgen.



  • Jetzt mal im ernst. Würdet ihr das wirklich über if else cascaden lösen. Was ist wenn ich die Werte über eine Oberfläche einpflegen will?



  • OrginellerName schrieb:

    Jetzt mal im ernst. Würdet ihr das wirklich über if else cascaden lösen. Was ist wenn ich die Werte über eine Oberfläche einpflegen will?

    Wenn die Bereiche fest sind ja. Du bist noch deine Lösung für eine Alternative Schuldig. Es gibt Möglichkeiten, aber ein Dictionary sehe ich da nicht als Lösungsansatz an.

    Wenn auch C++ und nicht C#: Wir haben in unserer Software flexible Wertebereiche die vom Benutzer definiert werden. Diese liegen sortiert in einem Vector (Immer mit einem Schwellenwert ab wann oder alternativ bis wann der Eintrag gilt) und diese werden beim ermitteln durchiteriert; eine Lösung über eine Dictionary (in C++: map) bei dem die Geschwindigkeitsvorteile desselben nicht wieder zunichte gemacht werden, sehe ich nicht. Ich will auch erst einmal sehen wie du einen Range-Key definieren willst, bei dem du anschließend nicht manuell suchen musst.



  • using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace TaxApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                var taxlist = new Dictionary<PayRange, Tax>
                                  {
                                      {new PayRange {Min = 0.00,     Max = 12000.00}, new Tax {Rate = 1.12}},
                                      {new PayRange {Min = 12000.01, Max = 20000.00}, new Tax {Rate = 1.15}},
                                      {new PayRange {Min = 20000.01, Max = 30000.00}, new Tax {Rate = 1.20}},
                                      {new PayRange {Min = 30000.01, Max = 99999.00}, new Tax {Rate = 1.25}}
                                  };
    
                Console.Write("Bitte Gehalt eingeben: ");
    
                var pay = Convert.ToDouble(Console.ReadLine());
    
                Console.Write("Steuersatz: ");
                Console.WriteLine(taxlist.SingleOrDefault(t => t.Key.Max >= pay && pay >= t.Key.Min).Value.Rate);
    
                Console.ReadKey();
    
            }
        }
    
        internal class Tax
        {
            public double Rate { get; set; }
        }
    
        internal class PayRange
        {
            public double Min { get; set; }
            public double Max { get; set; }
        }
    }
    


  • Hast du auch ein Beispiel, bei dem du das schnelle Suchen im Dictionary ausnutzt, und nicht nur wie bei einer Liste drüberiterierst?



  • OrginellerName schrieb:

    ...

    asc schrieb:

    ... eine Lösung über eine Dictionary (in C++: map) bei dem die Geschwindigkeitsvorteile desselben nicht wieder zunichte gemacht werden...

    Ganz davon abgesehen das ich deine Lösung als problematisch ansehe (Thema Double-Vergleich), und deine Bereiche auch nicht direkt aneinander Grenzen (Ich würde daher mit einem Wert - entweder "ab" oder "bis" arbeiten, nicht mit 2 Werten).



  • Kein Thema das mit dem double Vergleich. Mann kann hier noch vieles verbessern. Und keiner hat gesagt, dass ich Geschwindikkeitsvorteile habe mit der Dictionary. Aber viel sauberere als die if else Lösung. Und leicht erweiterbar.

    Ihr habt mir immer noch nicht verraten wie ihr das if else Konstrukt erweitert wenn ihr die Werte per GUI pflegen wollt.



  • OrginellerName schrieb:

    Ihr habt mir immer noch nicht verraten wie ihr das if else Konstrukt erweitert wenn ihr die Werte per GUI pflegen wollt.

    Im Ursprungspost ging es nicht um Erweiterbarkeit, Vergess das nicht.



  • OrginellerName schrieb:

    Kein Thema das mit dem double Vergleich. Mann kann hier noch vieles verbessern. Und keiner hat gesagt, dass ich Geschwindikkeitsvorteile habe mit der Dictionary. Aber viel sauberere als die if else Lösung. Und leicht erweiterbar.

    OK, also meinst du mit Dictionary ja doch ein sequentielles Durchmustern aller Fälle. Dann sind wir aus meiner Sicht wieder zurück bei "da gibts nichts zu diskutieren".

    Ihr habt mir immer noch nicht verraten wie ihr das if else Konstrukt erweitert wenn ihr die Werte per GUI pflegen wollt.

    Was erwartest du denn darauf für eine Antwort, die du nicht schon kennst? Die Frage ist, ob man das je braucht. Sollte man das von vornherein flexibel machen, auch wenn man es eigentlich meint nicht zu brauchen?

    BTW wenn du nicht "Dictionary" gesagt hättest wär der Thread 50% kürzer.


Anmelden zum Antworten