Elegancia en uso de Hashtable

04/08/2005 - 13:17 por lord | Informe spam
Hola grupo.

A recomendación de un miembro, estoy usando hashtable en mi
aplicación, y es justamente lo que buscaba ;). Pero tengo una dudilla
sobre si se puede hacer esto de una forma más "elegante".

Yo en mi hashtable almaceno un objeto que se llama "Relación", y como
Key de la hashtable uso el nombre de la relación.

Si para obtener el string descripción de la relación "nombreRel"
pongo lo siguiente:

hashPersonas["nombreRel"].Descripción


me dice que vamos mal, que me da error, vamos, exactamente el
siguiente:

error CS0117:
'object' no contiene una definición para 'Descripción'


Esto lo he solucionado, así:

((Relación)hashPersonas["nombreRel"]).Descripción


La pregunta es si hay alguna otra forma de solucionar el problema, que
sea menos incómoda, porque es un engorro tener que estar haciendo el
cast siempre que me haga falta algún valor de la tabla.

Gracias ;).

Preguntas similare

Leer las respuestas

#1 José Cordero
04/08/2005 - 14:28 | Informe spam
si, puedes crearte una clase heredando de Hashtable y añadirle un indizador
que te devuelva una Relación

ej.

public class MiHash : Hashtable
{


public Realcion this [string nombrerelacion]
{
get
{
//aqui busca el objeto y devuelve haciendole un casting a relación
}
}
}

"lord" escribió:

Hola grupo.

A recomendación de un miembro, estoy usando hashtable en mi
aplicación, y es justamente lo que buscaba ;). Pero tengo una dudilla
sobre si se puede hacer esto de una forma más "elegante".

Yo en mi hashtable almaceno un objeto que se llama "Relación", y como
Key de la hashtable uso el nombre de la relación.

Si para obtener el string descripción de la relación "nombreRel"
pongo lo siguiente:

hashPersonas["nombreRel"].Descripción


me dice que vamos mal, que me da error, vamos, exactamente el
siguiente:

error CS0117:
'object' no contiene una definición para 'Descripción'


Esto lo he solucionado, así:

((Relación)hashPersonas["nombreRel"]).Descripción


La pregunta es si hay alguna otra forma de solucionar el problema, que
sea menos incómoda, porque es un engorro tener que estar haciendo el
cast siempre que me haga falta algún valor de la tabla.

Gracias ;).


Respuesta Responder a este mensaje
#2 lord
04/08/2005 - 16:04 | Informe spam
Perfecto, José.

Con esto:

public class HashRelación : Hashtable
{
public HashRelación()
{
}

public Relación this[string nombreRel]
{
get
{
return (Relación)base[nombreRel];
}
}
}

ya va todo de lujo.

Muchas gracias ;).
Respuesta Responder a este mensaje
#3 Tristan
04/08/2005 - 18:56 | Informe spam
Solo un pequeño detalle, Lord. Hay una clase pensada justamente para hacer
eso: DictionaryBase. Esta tiene la ventaja de que no define ninguno de los
métodos This, Add, etc... permitiendo crear una versión auténticamente
tipada. La desventaja de usar Hashtable como base es que permitiría acceder
de forma no tipada. Utilizando DictionaryBase tu tabla solo podrá contener
objetos Relación.

class Relaciones: DictionaryBase
{
public void Add(string nombre, Relación relación)
{
Dictionary.Add(nombre, relacíón);
}

public int this[string nombre]
{
get
{
return (Relación) Dictionary[nombre];
}
}
}

La próxima versión de C# dispondrá de genéricos, que permitirán hacer todo
eso sin una sola línea de código.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#4 lord
04/08/2005 - 22:39 | Informe spam
Juan, demasiao, tío ;). Muchas gracias a los dos. Los comienzos son
duros, y más cuando se va con la prisa que llevo yo, que tengo que
tener esto acabao para fin de mes (proyecto de fin de carrera :\ ).

Sólo permíteme que te corrija un detalle menor. Sería:

public Relación this[string nombre]

y no:

public int this[string nombre]

Ya sé que ha sido un despiste. Pero por si lo ve alguien que sepa
menos que yo del tema, que no le lleve a error eso.

Lo dicho, gracias, gente ;).
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida