2011-02-15 13 views
7


Tengo un código como este.ayuda con HashTables que contiene matrices de cadenas en C#

Hashtable ht = new HashTable(); 
ht["LSN"] = new string[5]{"MATH","PHIS","CHEM","GEOM","BIO"}; 
ht["WEEK"] = new string[7]{"MON","TUE","WED","THU","FRI","SAT","SUN"}; 
ht["GRP"] = new string[5]{"10A","10B","10C","10D","10E"}; 

ahora quiero obtener los valores de esta HT como a continuación.

string s = ht["LSN"][0]; 

pero da error. Entonces, ¿cómo puedo resolver este problema?

+0

error al estudio –

Respuesta

8

Creo que desee utilizar un diccionario con tipo genérico en lugar de una tabla hash:

Dictionary<String, String[]> ht = new Dictionary<string, string[]>(); 

ht["LSN"] = new string[5] { "MATH", "PHIS", "CHEM", "GEOM", "BIO" }; 
ht["WEEK"] = new string[7] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" }; 
ht["GRP"] = new string[5] { "10A", "10B", "10C", "10D", "10E" }; 

string s = ht["LSN"][0]; 

Esto debería compilarse bien.

De lo contrario, se necesita realizar un reparto tales como:

string s = (ht[ "LSN" ] as string[])[ 0 ]; 
+0

+1 para el diccionario.Este es el mejor tipo de ajuste para este tipo de problemas. – Oliver

2

tiendas Hashtable objetos sin tipo: que había necesidad de re-emitir el valor se lee de nuevo en una matriz de cadenas, por ejemplo,

string s = ((string[])ht["LSN"])[0]; 

o

string s = (ht["LSN"] as string[])[0]; 

Sin embargo, usted es mejor usar algo escrito, por ejemplo, un Dictionary<> - entonces sólo tendremos que trabajar:

Dictionary<string, string[]> ht = new Dictionary<string, string[]>(); 
... 
string s = ht["LSN"][0]; 
1

su ht["LSN"][0] le devolverá una matriz de cadenas. por lo que debe agregar otro indexador para obtener el valor adecuado.

((string[])ht["LSN"][0])[0] 
1

El indexer de la clase HashTable siempre devuelve una instancia de object. Vas a tener que lanzar ese objeto a una matriz de cadenas:

string s = ((string[]) ht["LSN"])[0]; 

Dicho esto, considere el uso de la clase genérica Dictionary<TKey, TValue> lugar.

1

Desde Hashtable contenidos se exponen como object que tendría que emitir:

string s = (ht["LSN"] as string[])[0]; 

Pero probablemente sería mejor usar un recipiente inflexible de tipos según lo sugerido por Nick.

1
string[] aStrings = (string[])ht["LSN"]; 
string s = aStrings[0]; 
2

su tabla hash es del tipo de objeto, por lo que cuando se intenta acceder a la matriz, obtendrá un error desde el objeto no soporta la sintaxis de los arrays de acceso que esté utilizando. Si utilizó un diccionario, como se explica en otras respuestas, podría usar genéricos para definir que está utilizando matrices de cadenas en lugar de objetos, que funcionarán como lo desee.

, alternativamente, puede convertir las variables de la siguiente manera:

string[] temp = (string[])ht["LSN"]; 

esto le dará acceso a la temperatura que desea.

Cuestiones relacionadas