Frage

Sagen Sie, ich mache eine statische Klasse wie folgt mit einer Erweiterungsmethode:

public static class MyStaticExtensionClass
{
    private static readonly Dictionary<int, SomeClass> AlgoMgmtDict
        = new Dictionary<int, SomeClass>();

    public static OutputClass ToOutput(this InputClass input)
    {
        // clears up the dict
        // does some kind of transform over the input class
        // return an OutputClass object
    }    
}

Wird das staatliche Verwaltungswörterbuch in einem Multi -Benutzer -System nicht korrekte Werte für den Transformationsalgorithmus bereitgestellt? Wird eine reguläre Klasse ein besseres Design sein oder das Wörterbuch innerhalb der Methode ein besseres Design schieben?

War es hilfreich?

Lösung

Für Ihr Wörterbuch stehen nur drei Szenarien zur Verfügung: entweder es muss geteilt werden oder es darf nicht geteilt werden oder Sie Ich weiß oder kümmere mich nicht darum.

Wenn es muss Seien Sie gemeinsam genutzt, müssen Sie eine ordnungsgemäße Sperre implementieren. Aber seit dem ersten, was Sie in ToOutput() soll das Wörterbuch löschen, es sieht nicht so aus, als würde es Ihnen viele Vorteile bringen.

Wir sind also auf die beiden verbleibenden Szenarien (darf nicht geteilt werden oder Ich weiß oder kümmere mich nicht darum), und in beiden Fällen wäre es besser, das Wörterbuch in einer lokalen Variablen im Inneren zu isolieren ToOutput():

public static OutputClass ToOutput(this InputClass input)
{
    Dictionary<int, SomeClass> algoMgmtDict = new Dictionary<int, SomeClass>();
    // Dictionary starts up empty, no need to clear anything.

    // Do some kind of transform over the `input` object.
    // Return an OutputClass instance.
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top