帮助Hash表,其中包含C#中的字符串数组

时间:2011-02-15 09:41:25

标签: c# arrays string hashtable


我有这样的代码。

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"};

现在我想从这个ht获取值,如下所示。

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

但它给出了错误。那我怎么能解决这个问题呢。

7 个答案:

答案 0 :(得分:8)

我认为你想使用泛型字典而不是Hashtable:

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];

这应该编译得很好。

否则你需要执行演员如:

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

答案 1 :(得分:2)

Hashtable存储无类型对象:您需要将读回的值重新转换为字符串数组,例如

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

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

但是,您最好使用键入的内容,例如:一个Dictionary<> - 然后就可以了:

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

答案 2 :(得分:2)

您的散列表是对象类型,因此当您尝试访问该数组时,您将收到错误,因为对象不支持您正在使用的数组访问器语法。如果您使用字典,如其他答案中所述,您可以使用泛型来定义您使用字符串数组而不是对象,这将按您的意愿工作。

或者,您可以像这样投射变量:

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

这将为您提供所需的临时访问权。

答案 3 :(得分:1)

您的ht["LSN"][0]会返回一个字符串数组。所以你必须添加另一个索引器来获得适当的值。

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

答案 4 :(得分:1)

HashTable类的indexer始终返回object的实例。您必须将该对象强制转换为字符串数组:

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

尽管如此,请考虑使用通用Dictionary<TKey, TValue>类。

答案 5 :(得分:1)

由于Hashtable内容公开为object,您需要投射:

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

但是你可能会更好地使用Nick建议的强类型容器。

答案 6 :(得分:1)

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