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]的东西吧?但这没有用。我错过了什么?

C# Hastable of Objetcs

首先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); 
}