我有这样的代码。
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];
但它给出了错误。那我怎么能解决这个问题呢。
答案 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)
答案 6 :(得分:1)
string[] aStrings = (string[])ht["LSN"];
string s = aStrings[0];