如何测试C#Hashtable是否包含特定的键/值对?

Bri*_*ian 7 c# hashtable

我在遍历表时将一堆所谓的唯一项ID作为键存储,并将文件位置作为哈希表中的值存储.当我正在运行它时,我需要确保它们的键/位置对是唯一的或抛出错误消息.我有哈希表设置并加载值,但不知道要测试什么:

Hashtable check_for_duplicates = new HashTable();
foreach (object item in items)
{
    if (check_for_duplicates.ContainsKey(item["ItemID"]) &&
        //what goes here?  Would be contains item["Path"] as the value for the key)
    {
        //throw error
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ett 11

试试这个:

Hashtable check_for_duplicates = new HashTable();
foreach (object item in items)
{
    if (check_for_duplicates.ContainsKey(item["ItemID"]) &&
        check_for_duplicates[item["ItemID"]].Equals(item["Path"]))
    {
        //throw error
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用的是.NET 2.0或更高版本,请考虑使用Generics,如下所示:

List<Item> items; // Filled somewhere else

// Filters out duplicates, but won't throw an error like you want.
HashSet<Item> dupeCheck = new HashSet<Item>(items); 

items = dupeCheck.ToList();
Run Code Online (Sandbox Code Playgroud)

实际上,我刚刚检查过,看起来HashSet只是.NET 3.5.字典更适合2.0:

Dictionary<int, string> dupeCheck = new Dictionary<int, string>();

foreach(Item item in items) {
    if(dupeCheck.ContainsKey(item.ItemID) && 
       dupeCheck[item.ItemID].Equals(item.Path)) {
        // throw error
    }
    else {
        dupeCheck[item.ItemID] = item.Path;
    }    
}
Run Code Online (Sandbox Code Playgroud)