比较Hashtable和IDictionary的相同数据(asp.net,c#)

时间:2016-07-29 10:19:14

标签: c# asp.net dictionary compare hashtable

我目前在尝试将Hashtable和Dictionary相互比较时遇到问题。

我正在使用Telerik radgrid进行更新。

在更新时,我想检查旧值是否与新值完全相同,如果它们匹配,我将取消该方法。

以下是我正在使用的代码。我将newvalues存储在IDictionary中的Hashtable和SavedOldValues中。

    if ((e.Item is GridEditableItem) && e.Item.IsInEditMode && e.CommandName.Equals("Update"))
    {
        try
        {
            GridEditableItem UpdateItem = (GridEditableItem)e.Item;
            Hashtable newValues = new Hashtable();
            e.Item.OwnerTableView.ExtractValuesFromItem(newValues, UpdateItem);
            IDictionary oldValues = UpdateItem.SavedOldValues;

更新问题: 所以我在下面提出了建议并循环使用oldValues Dictionary并检查newValues Hashtable中是否存在密钥。

以下是我要实现的目标。基本上我需要使用键来查找字典中的值,但我似乎无法让它工作。

我得到的错误是对象不包含Contains的定义

    foreach (DictionaryEntry oldEntry in oldValues)
                {
                    if (newValues.ContainsKey(oldEntry.Key) && 
                        newValues[oldEntry.Key].Contains(oldEntry.Value))
                    {
                       //Data matches 
                    }
                }

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

由于您使用的字典不是通用的,因此从IDictionaryHashtable检索值需要相同的时间。但散列表增加了线程安全性。

答案 1 :(得分:0)

这里的诀窍是,您需要将来自两个集合的检索数据排序为相同的格式。这样,这些新的已排序集合可以假定为相同的顺序,因此如果它们是等价的,您将具有相同的值。

您可以填充一些可以通过代码访问的好SortedDictionary类,或编写自己的排序算法。然后只需比较每个元素的两个排序集合以检查等价性。

此外,您可以遍历HashTaple或Dictionary并在非循环集合上调用ContainsKey(TKey)ContainsValue(TValue)以检查是否等效。