C#中的哈希表:多次使用相同的键

4

我用C#从数据库中获取多条具有相同id的记录,我想将它们存储在一个Hashtable中。我使用id作为Hashtable中的键,对象本身作为值。但是,由于重复添加了相同的键,它会抛出异常。有没有办法解决这个问题?

这是我的代码:

Hashtable localItemsIndex = new Hashtable();            
foreach (TzThing thing in localThingz)
         localItemsIndex.Add(thing.Id, thing); 

提前感谢,jennie


2
你是否必须使用旧的非泛型集合,还是你愿意接受我们基于.NET 2及更高版本提出的解决方案?那LINQ呢? - Jon Skeet
4个回答

7
也许你应该使用Dictionary<Id,List<TzThing>>来存储一个键对应多个值的情况。
public void Add(YourIdType key,TzThing thing )
{
   if(dictionary.ContainsKey(key))
   {
      dictionary[key].Add(thing);
   }
   else
   {
      dictionary.Add(key,new List<TzThing> {thing});
   }
}

请问您能否简要说明如何将相同的键存储在字典中? - user642378

1
哈希表的键必须是唯一的:您不能将相同的键两次添加到其中。您可以使用 List 或 HashSet 进行替代,其中 T 是您类的键值对(或使用 .net KeyValuePair 类),或者使用 Dictionary 类,其中 V 是列表或集合,但是您仍需要手动管理重复键插入。

0

如果您有很多与相同键匹配的内容,请将这些内容放入一个列表中。


0

你不能使用HashTable来实现这个功能。因为它只接受唯一的键值。否则,你需要使用List<T>KeyValuePair<key,value>类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接