C# Hastable of Objetcs
本文关键字:Objetcs of Hastable | 更新日期: 2023-09-27 18:35:19
我在哈希表中有对象,在该对象中我有一个列表,如何访问它?
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]的东西吧?但这没有用。我错过了什么?
首先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
。
哈希表是表示集合的数据结构。这意味着,根据定义,您不想访问哈希表来获取元素,而只想添加、删除或 aks(如果元素存在)。这些是集合的基本操作。
也就是说,.NET 中的HashSet<T>
没有索引器。为什么?考虑一下你自己写的那行:
var item = gen.h_lh[lh]
如果你真的可以提供索引lh
,你期望哈希表给你什么?同一个实例?当然不是,如果你在索引器中使用它,你已经拥有它。所以也许你的问题不是很确定。
首先,您需要确定为什么要(以及如何)访问这些元素。您想要的只是遍历所有这些,或者您想快速索引其中任何一个?如果您只想在某个时候获取所有元素,那么您拥有所需的一切:HashSet<T>
实现IEnumerable<T>
。如果你需要获取一个特定的元素,那么你必须有一些键来识别元素(就像这里的name
属性),在这种情况下,你想要的不是HashSet<lh>
而是Dictionary<string,lh>
,就像@Tergiver说的那样。
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);
}