.NET: Schalter gegen Wörterbuch für Zeichenkettenschlüssel

Ich habe eine Situation, in der ich ein Geschäftsobjekt mit ungefähr 15 Eigenschaften verschiedener Typen habe. Das Geschäftsobjekt muss außerdem eine Schnittstelle mit der folgenden Methode implementieren:

object GetFieldValue(string FieldName);

Ich sehe zwei Möglichkeiten, diese Methode zu implementieren:

Verwenden Sie eine switch-Anweisung:

switch ( FieldName )
{
    case "Field1": return this.Field1;
    case "Field2": return this.Field2;
    // etc.
}

Verwenden Sie ein Wörterbuch (SortedDictionary oder HashTable?):

return this.AllFields[FieldName];

Welches wäre effizienter?

Hinzugefügt: Ich habe vergessen zu sagen. Diese Methode dient zum Anzeigen des Elements in einem Raster. Das Raster enthält für jede dieser Eigenschaften eine Spalte. Es wird routinemäßig Gitter mit etwas mehr als 1000 Gegenständen geben. Deshalb mache ich mir Sorgen um die Leistung.

Hinzugefügt 2:

Hier ist eine Idee: ein hybrider Ansatz. Erstellen Sie ein statisches Wörterbuch mit Schlüsseln als Eigenschaftsnamen und Werten als Indizes im Array. Das Wörterbuch wird nur einmal beim Start der Anwendung gefüllt. Jede Objektinstanz hat ein Array. Die Suche würde also so aussehen:

return this.ValueArray[StaticDictionary[FieldName]];

Der Algorithmus zum Füllen des Wörterbuchs kann Reflektion verwenden. Die Eigenschaften selbst werden dann entsprechend implementiert:

public bool Field1
{
    get
    {
        object o = this.ValueArray[StaticDictionary["Field1"]]; 
        return o == null ? false : (bool)o;
    }
    set
    {
        this.ValueArray[StaticDictionary["Field1"]] = value;
    }
}

Kann jemand irgendwelche Probleme damit sehen?

Sie können auch einen Schritt weiter gehen und das ValueArray / StaticDictionary in einem separaten generischen Typ ablegenValueCollection<T>, woherT würde den Typ für die Reflexion angeben. ValueCollection behandelt auch den Fall, dass noch kein Wert festgelegt wurde. Eigenschaften könnten dann einfach geschrieben werden als:

public bool Field1
{
    get
    {
        return (bool)this.Values["Field1"];
    }
    set
    {
        this.Values["Field1"] = value;
    }
}

Und am Ende frage ich mich immer wieder, ob eine einfache switch-Anweisung möglicherweise nicht gleichzeitig schneller und einfacher zu warten ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage