.NET: przełącznik vs słownik kluczy tekstowych

Mam sytuację, w której mam obiekt biznesowy z około 15 właściwościami różnych typów. Obiekt biznesowy musi również zaimplementować interfejs, który ma następującą metodę:

object GetFieldValue(string FieldName);

Widzę 2 sposoby wdrożenia tej metody:

Użyj instrukcji przełączania:

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

Użyj słownika (SortedDictionary lub HashTable?):

return this.AllFields[FieldName];

Które byłoby bardziej wydajne?

Dodany: Zapomniałem powiedzieć. Ta metoda służy do wyświetlania elementu w siatce. Siatka będzie miała kolumnę dla każdej z tych właściwości. Rutynowo będą w nich siatki z nieco ponad 1000 pozycji. Dlatego martwię się o wydajność.

Dodano 2:

Oto pomysł: podejście hybrydowe. Utwórz słownik statyczny z kluczami będącymi nazwami właściwości i wartościami będącymi indeksami w tablicy. Słownik jest wypełniany tylko raz, podczas uruchamiania aplikacji. Każda instancja obiektu ma tablicę. Tak więc wyszukiwanie będzie wyglądało następująco:

return this.ValueArray[StaticDictionary[FieldName]];

Algorytm wypełniania słownika może wykorzystywać odbicie. Same właściwości zostaną następnie odpowiednio zaimplementowane:

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

Czy ktokolwiek widzi w tym jakieś problemy?

Można go również zrobić o krok dalej, a ValueArray / StaticDictionary można umieścić w oddzielnym typie ogólnymValueCollection<T>, gdzieT określi typ odbicia. ValueCollection obsługuje również przypadek, gdy nie ustawiono jeszcze żadnej wartości. Właściwości można następnie zapisać po prostu jako:

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

I w końcu zaczynam się zastanawiać, czy prosta instrukcja zmiany może nie być zarówno szybsza, jak i łatwiejsza do utrzymania ....

questionAnswers(4)

yourAnswerToTheQuestion