2011-08-17 13 views
15

Nie wiem, czy mam "gęsty dzień" - ale właśnie zastanawiałem się, jaka jest najlepsza trasa tutaj.Jaki jest najlepszy sposób przechowywania par łańcuchów, tworzenia obiektów lub korzystania z klasy w .NET?

Kontekst:

Mam listę pól i chcę zapisać nazwy aliasów z nich (używam .NET 2.0 BTW), na przykład

enter image description here

więc jego zasadniczo parę sznurków:

mającej, Ref

WSPÓLNOTA, Wspólnota

POST_CODE, kod pocztowy

... i myślę, że to wygląda za burtą cały czas, aby nadal tworzyć obiekty dla takich rzeczy, więc powinienem utworzyć StringDictionary i przechować wartości w ten sposób, nawet jeśli nie użyłbym żadnej z funkcji klasy StringDictionary i nie zawracałbym sobie głowy wartością klucza powiązanie par itp. - Po prostu chcę utrzymać parę ciągów w zasadzie.

Każda pomoc/wskaźniki byłyby świetne.

Odpowiedz

6

Możesz użyć generycznego Dictionary<string, string>, jeśli Twoje "Nazwy pól" są unikatowe.

W przeciwnym razie można użyć klasy Lookup, jeśli nie masz nic przeciwko kopiowaniu kluczy.

Nie przejmowałbym się zbytnio tym, czy korzystasz z pełnej funkcjonalności tych klas, czy nie. Myślę, że ważniejszą sprawą powinno być napisanie prostego, łatwego do odczytania kodu utrzymującego.

5

co z Tuple<string,string>? Jest wbudowany w .net 4.0 i jest lekki.

+0

Należy pamiętać z duplikatów kluczy, jeśli chcesz uniknąć. – Jayee

31

Ogólna klasa "pary" dla .NET to Tuple. Można go użyć jako:

var strings=new List<Tuple<string, string>>(); 
strings.Add(Tuple.Create("REFERENCE", "Ref")); 

Słownik jest doskonale akceptowalnym zamiennikiem, jeśli najbardziej lewy ciąg jest unikalny (np. Klucz). W przeciwnym razie dostaniesz błędy.

Co do tego, czy lepiej jest korzystać z wbudowanych kolekcji, czy utworzyć rzeczywisty obiekt, zależy to od potrzeb (czy później dodamy więcej kolumn - nie da się tego zrobić przy użyciu słownika), jak często możesz go użyć (jeśli jest to typ rdzeniowy, prawdopodobnie powinieneś zrobić dla niego model domeny) itp.

Edycja: Nie używać żadnej wbudowanej funkcji słownika, to nie prawda: używasz jej algorytm wyszukiwania binarnego i konstrukcja drzewa wewnętrznego dla błyskawicznych wyszukiwań. Lista Tuple lub Twój własny typ najprawdopodobniej tego nie będzie mieć i powróci do wyszukiwania liniowego.

3

moim zdaniem, lepiej jest użyć strukturę niestandardową do przechowywania dwóch ciągów, ponieważ: System.Collections.Generic.Dictionary i System.Collections.Specialized.NameValueCollection wymagają metody Add dodać ciągi do nich - to dodatkowe linie kodu. Klasa System.Tuple ma tylko właściwości ReadOnly - może to stanowić przeszkodę.

Przykład prostą strukturę:

public struct DoppelWert 
{ 
public string Wert1; 
public string Wert2; 
} 
+1

Dobre rozwiązanie i uwielbiam nazwy pól – CindyH

Powiązane problemy