我目前在尝试将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
}
}
感谢您提供的任何帮助。
答案 0 :(得分:0)
由于您使用的字典不是通用的,因此从IDictionary
和Hashtable
检索值需要相同的时间。但散列表增加了线程安全性。
答案 1 :(得分:0)
这里的诀窍是,您需要将来自两个集合的检索数据排序为相同的格式。这样,这些新的已排序集合可以假定为相同的顺序,因此如果它们是等价的,您将具有相同的值。
您可以填充一些可以通过代码访问的好SortedDictionary类,或编写自己的排序算法。然后只需比较每个元素的两个排序集合以检查等价性。
此外,您可以遍历HashTaple或Dictionary并在非循环集合上调用ContainsKey(TKey)
和ContainsValue(TValue)
以检查是否等效。