帮助在 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&lt;&gt; - 然后它就可以工作了:

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&lt;TKey, TValue&gt; 类。

【讨论】:

【参考方案6】:
string[] aStrings = (string[])ht["LSN"];
string s = aStrings[0];

【讨论】:

【参考方案7】:

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

或者,您可以像这样转换变量:

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

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

【讨论】:

以上是关于帮助在 C# 中包含字符串数组的哈希表的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE怎样判断一个串中包含字串,如C#中的contain

C#多维数组,ArrayList,还是哈希表?

c#用foreach遍历数组、列表时是直接获得数据元素,而foreach哈希表时,为啥获得的是命名空间名??

Mongoose 查找数组中包含字符串的所有文档

如何将拆分的字符串保存在C结构中包含的字符数组中?

将括号中包含多个字符串的文本解析为数组