帮助在 C# 中包含字符串数组的哈希表
Posted
技术标签:
【中文标题】帮助在 C# 中包含字符串数组的哈希表【英文标题】:help with HashTables which contents string arrays in C# 【发布时间】:2011-06-27 11:33:24 【问题描述】:我有这样的代码。
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];
但它给出了错误。那么我该如何解决这个问题。
【问题讨论】:
【参考方案1】:我认为您想使用通用类型的字典而不是哈希表:
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];
【讨论】:
【参考方案3】:您的ht["LSN"][0]
将返回一个字符串数组。所以你必须添加另一个索引器才能获得正确的值。
((string[])ht["LSN"][0])[0]
【讨论】:
【参考方案4】:由于Hashtable
的内容暴露为object
,您需要进行转换:
string s = (ht["LSN"] as string[])[0];
但您可能最好使用Nick 建议的强类型容器。
【讨论】:
【参考方案5】:HashTable
类的indexer 始终返回object
的实例。您必须将该对象转换为字符串数组:
string s = ((string[]) ht["LSN"])[0];
也就是说,请考虑改用通用的Dictionary<TKey, TValue>
类。
【讨论】:
【参考方案6】:string[] aStrings = (string[])ht["LSN"];
string s = aStrings[0];
【讨论】:
【参考方案7】:你的哈希表是 object 类型的,所以当你尝试访问数组时,你会得到一个错误,因为 object 不支持你正在使用的数组访问器语法。如果您使用字典,如其他答案中所述,您可以使用泛型来定义您使用的是字符串数组而不是对象,这将按您的意愿工作。
或者,您可以像这样转换变量:
string[] temp = (string[])ht["LSN"];
这将为您提供所需的临时访问权限。
【讨论】:
以上是关于帮助在 C# 中包含字符串数组的哈希表的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE怎样判断一个串中包含字串,如C#中的contain