Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Best Practice für Methodenaufruf bei unterschiedlichen Parametern
LeoBold
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

Best Practice für Methodenaufruf bei unterschiedlichen Parametern

beantworten | zitieren | melden

Hi zusammen,

ich habe:

            if (AutoHighName(RFX_Name).isAutoHigh)
            {
                ClientRiskData.clientRiskCategory = Properties.Settings.Default.riskCategoryHigh;
                ClientRiskData.clientAutoHighReason = AutoHighReasonData.autoHighKey + " " + AutoHighReasonData.autoHighValue;
                ClientRiskData.clientNr = Nr;
                return ClientRiskData;
            }

und

        private AutoHigh AutoHighName(string RFX_Name)
        {
            if (autoHighName.Exists(kvp => kvp.Key == RFX_Name))
            {
                AutoHighReasonData.autoHighKey = RFX_Name;
                AutoHighReasonData.autoHighValue = autoName.First(kvp => kvp.Key == RFX_Name).Value;
                AutoHighReasonData.isAutoHigh = true;
                return AutoHighReasonData;
            }
            else
            {
                AutoHighReasonData.isAutoHigh = false;
                return AutoHighReasonData;
            }
        }

Ich habe insgesamt 12 Values, die die übergeordnete Methode empfängt.

Von den 12 Values werden 4 überprüft, ob diese in einer Liste vorhanden sind.

Ich könnte das Problem einfach lösen, und die zwei Methoden einfach vier mal kopiere und die Variablennamen / Listennamen ändern aber das ist doch irgendwie Schrott, oder?

RFX_Name ist die Variable, genauso wie Liste "autoName"

Hier möchte ich eine Überprüfung von RFX_Vorname, RFX_Alter, RFX_Geschlecht in Lists, die einen anderen Namen als "autoName" haben.

Könnt ihr mir hier einen Denkanstoß geben, oder ist das viermalige kopieren der Methode vielleicht sogar doch in Ordnung?

Vielen Dank!
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3.003
Herkunft: Thüringen

beantworten | zitieren | melden

Zum einen benutzt du einige Klassen-Variablen, was die zwei Methoden beim Drüberschauen durch einen Dritten ziemlich unübersichtlich macht (dazu kommt die Benennung/Schreibweise deiner Variablen, die auch nicht durchgängig gleich ist, sondern irgendwie nach Lust und Laune...).

Zum anderen würde ich sehr kritisch sehen, dass du

a) eine Methode aufrufst, die eine Variable zurückliefert,die gleichzeitig eine Instanzvariable ist
b) einmal den Rückgabewert der Methode nutzt, und dann in der übernächsten Zeile stattdessen die Instanzvariable, die die Methode verändert hat (was man aber wissen muss!)

Zum dritten scheinst du Dictionaries zu benutzen, machst dir aber den Code zusätzlich unübersichtlich durch den Aufruf von Exists() statt ContainsKey.


var checkedName = AutoHighName(RFX_Name, autoList);
if(checkedName.isAutoHigh)
{
    ClientRiskData.clientRiskCategory = Properties.Settings.Default.riskCategoryHigh;
    ClientRiskData.clientAutoHighReason = $"{checkedName.autoHighKey} {checkedName.autoHighValue}";
    ClientRiskData.clientNr = Nr;
    return ClientRiskData;
}

private AutoHigh AutoHighName(string key, Dictionary<string, ???> valueList)
{
    return valueList.ContainsKey(key) 
    ? new AutoHigh 
       {
            autoHighKey = key,
            autoHighValue = autoName[key]
            isAutoHigh = true,
        }
     : new AutoHigh { isAutoHigh = false };
}


Umbenennen:
  • alles, was autoHigh ist (kein Mensch weiß, was das bedeuten soll)
  • alle Properties der Klasse AutoHigh (Großschreibung!)
  • autoName zB in _autoNameList o.ä., wenn du keinen führenden Unterstrich für Instanzvariablen nutzen willst, benutz IMMER this. zum Aufruf)
  • RFX_Name, Unterstriche im Namen sind in C# unüblich


LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
LeoBold
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Cool, dank dir!

Steile Lernkurve heute. Die Bezeichner waren schlamperhaft "anonymisiert"

Danke!
private Nachricht | Beiträge des Benutzers