polimorfico - instanciar una clase c#
¿Cuál es la mejor manera de almacenar pares de cadenas, crear un objeto o usar una clase en.NET? (7)
¿Qué hay de Tuple ?
No sé si estoy teniendo un "día espeso", pero me pregunté cuál es la mejor ruta aquí.
Contexto:
Tengo una lista de campos y quiero almacenar nombres de alias con ellos (estoy usando .NET 2.0 BTW), por ejemplo
Así que es esencialmente un par de cuerdas:
Referencia, referencia
Comunidad, Comunidad
Codigo postal / código postal
... y creo que parece exagerar 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 funciones de la clase StringDictionary. y no me molesta la asociación de un par de valores clave, etc., solo quiero mantener un par de cadenas esencialmente.
Cualquier ayuda / punteros sería genial.
¿Qué hay de Tuple<string,string>
? Está integrado en .net 4.0 y es ligero.
En mi opinión, es mejor usar una estructura personalizada para almacenar dos cadenas, ya que: System.Collections.Generic.Dictionary
y System.Collections.Specialized.NameValueCollection
requieren el método Add
para agregar cadenas en ellas, son líneas adicionales 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;
}
La clase genérica de "par" para .NET es Tuple
. Lo usarías como:
var strings=new List<Tuple<string, string>>();
strings.Add(Tuple.Create("REFERENCE", "Ref"));
Un diccionario es un sustituto perfectamente aceptable si la cadena que está más a la izquierda es única (es decir, una clave). Obtendrás errores de lo contrario.
En cuanto a si es mejor usar las colecciones integradas o crear un objeto real, depende de sus necesidades (¿agregará más columnas más adelante? No puede hacer eso con un enfoque de diccionario), con qué frecuencia lo usa ( si es un tipo de núcleo, probablemente deberías hacer un modelo de dominio para ello, etc.
Edición: En cuanto a no utilizar ninguna funcionalidad incorporada en el diccionario, eso no es cierto: está utilizando su algoritmo de búsqueda binario y la construcción interna de árbol para búsquedas rápidas a la luz de los rayos. Es probable que una lista de Tuple
o de tu propio tipo no tenga esto y volverá a una búsqueda lineal.
Para pares de cadenas, como alternativa, utilice NameValueCollection
Sorprendido, nadie mencionó KeyValuePair? https://msdn.microsoft.com/en-us/library/5tbh8a42(v=vs.110).aspx
Tenga en cuenta que si le preocupa el rendimiento, consulte esta comparación http://www.dotnetperls.com/keyvaluepair
Puede usar el Dictionary<string, string>
genérico Dictionary<string, string>
si sus "Nombres de campo" son únicos.
De lo contrario, podría usar la clase de Lookup si no le importa claves duplicadas.
No me preocuparía demasiado si usas la funcionalidad completa de esas clases o no. Creo que la preocupación más importante debería ser escribir un código simple, fácil de leer y mantener.