2011-08-17 25 views
15

No sé si estoy teniendo un "día difícil", pero me pregunto cuál es la mejor ruta aquí.¿Cuál es la mejor manera de almacenar pares de cadenas, crear un objeto o usar una clase en .NET?

Contexto:

tengo una lista de campos y quiero almacenar nombres de alias con ellos (estoy usando .NET 2.0 por cierto), por ejemplo,

enter image description here

Así que es esencialmente un par de cuerdas:

de referencia, Ref

COMUNIDAD, Comunidad

POST_CODE, Código Postal

... y estoy pensando que parece por la borda todo el tiempo para seguir creando objetos para cosas como esta, así que debería crear un StringDictionary y almacenar los valores de esa manera, aunque no usaría ninguna de las funcionalidades de la clase StringDictionary y no me molesta el valor clave asociación de pares, etc. - Solo quiero mantener un par de cadenas esencialmente.

Cualquier ayuda/punteros sería genial.

Respuesta

6

Puede usar el Dictionary<string, string> genérico si sus "Nombres de campo" son únicos.

De lo contrario, podría utilizar la clase Lookup si no le molestan las llaves duplicadas.

No me preocuparía demasiado si utiliza la funcionalidad completa de esas clases o no. Creo que la preocupación más importante debe ser escribir simple, fácil de leer & mantener el código.

5

¿qué hay de Tuple<string,string>? Está construido en .net 4.0 y es liviano.

+0

Tenga en cuenta con los duplicados de las llaves, si se desea evitar. – Jayee

31

La clase genérica "pair" para .NET es Tuple. Se podría utilizarlo como:

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

Un diccionario es un sustituto perfectamente aceptable si el extremo izquierdo de cuerdas es único (es decir, una llave). Obtendrá errores de lo contrario.

En cuanto a si es mejor usar las colecciones integradas o crear un objeto real, depende de sus necesidades (¿va a agregar más columnas más adelante? No puede hacerlo con un enfoque de diccionario), con qué frecuencia lo usa (si es un tipo de núcleo, probablemente debería hacer un modelo de dominio para él) etc.

Editar: En cuanto a no usar ninguna funcionalidad integrada de diccionario, eso no es cierto: está usando su algoritmo de búsqueda binaria y construcción de árbol interno para búsquedas ultrarrápidas. Es muy probable que una lista de Tuple o de su propio tipo no tenga esto y se revertirá a una búsqueda lineal.

3

En mi opinión, es mejor utilizar una estructura personalizada para almacenar dos cadenas, debido a que: System.Collections.Generic.Dictionary y System.Collections.Specialized.NameValueCollection requieren el método Add añadir cuerdas en ellos - es más líneas de código. La clase System.Tuple solo tiene propiedades ReadOnly, esto puede ser un obstáculo.

Ejemplo de estructura simple:

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

Buena solución y me encantan los nombres de campo – CindyH

Cuestiones relacionadas