我有哈希表中的对象,在该对象中我有一个列表,如何访问它?
ls.cs
class lh
{
public string name;
public List<ulong> nList = new List<ulong>();
public lh(string name)
{
this.name = name; ;
}
}
Program.cs
static void Main(string[] args)
{
while((line=ps.ReadLine()) != null)
{
gen.h_lh.Add(line, new lh(line));
}
}
public class gen
{
public static Hashtable h_lh = new Hashtable();
}
这是有效的。当我调试时,我可以看到在哈希表中创建的对象;我只是不知道如何访问/存储列表的值
它必须像gen.h_lh [lh]。某事对吗?但这没用。我错过了什么?
答案 0 :(得分:1)
首先Hashtable
已过时,请改用Dictionary<TKey, TValue>
(Dictionary<string, lh>
)。
根据密钥,您可以使用以下代码访问该密钥的值:h_lh[key]
。
或者您可以使用以下命令枚举所有键/值对:
foreach (KeyValuePair<string, lh> pair in h_lh)
pair.Value // this is an lh object
您还可以只列举键h_lh.Keys
,或仅列举h_lh.Values
值。
答案 1 :(得分:0)
foreach(System.System.Collections.DictionaryEntry entry in h_lh)
{
Console.WriteLine("Key: " + entry.Key.ToString() + " | " + "Value: " + entry.Value.ToString());
}
或者您可以使用密钥
访问它lh myLh = h_lh[line];
更新评论的答案
foreach(System.System.Collections.DictionaryEntry entry in h_lh)
{
List<ulong> nList = (ulong)entry.Value;
nList.Add(1);
}
答案 2 :(得分:0)
哈希表是表示集合的数据结构。这意味着,根据定义,您不希望访问哈希表来获取元素,只是想要添加,删除或响应元素是否存在。这些是使用集合的基本操作。
这就是说,.NET中的HashSet<T>
没有索引器。为什么?考虑一下你自己写的那一行:
var item = gen.h_lh[lh]
如果你真的可以提供lh
索引,你期望哈希表给你什么?同样的例子?当然不是,如果你在索引器中使用它,你已经拥有它了。所以也许你的问题不太确定。
首先,您需要确定要访问元素的原因(以及如何)。你想要的只是迭代所有这些,或者你想快速索引它们中的任何一个?如果您只想在某个时刻获得所有元素,那么您就拥有了所需的一切:HashSet<T>
实现了IEnumerable<T>
。如果你需要获得一个特定的元素,那么你必须有一些 key 来识别元素(比如这里的name
属性),在这种情况下你想要的不是{{ 1}}但是HashSet<lh>
,就像@Tergiver说的那样。