我有一个数据表,我想在对数据表的行进行编辑之前和之后比较每一行的哈希码。这就是我获取HashCode的方法,将其与键一起存储在字典中,然后返回
Dictionarymydict1= new Dictionary (); foreach (DataRow row in DataTable.Rows) { mydict.Add(row["Name"].ToString(), row.GetHashCode()); } return mydict1;
编辑数据表的行中的值之后,我再次调用相同的函数,并获取行的所有哈希码值并将其存储在mydict2中。当我比较mydict1和mydict2时,它们是完全相同的,甚至以为我已经对行进行了编辑。如何捕获编辑内容?或者我如何才能最初获取值的哈希码?也许我没有正确获得哈希码,请帮忙。
我假设您没有使用自定义DataRow
类,并且期望GetHashcode
基于的内容返回某种“校验和”值DataRow
。
那不是什么GetHashCode
,也不应该。哈希码用于将项目存储在一个Dictionary
或其他基于哈希的集合中。
从MSDN:
哈希码是一个数字值,用于在基于哈希的集合中插入和标识对象,例如
Dictionary<TKey, TValue>
类,Hashtable
类或从DictionaryBase
该类派生的类型。
对于对象的GetHashCode
相等实例,返回的默认行为是相等的哈希码,而不管该对象内的任何基础值是什么,这就是为什么在更改后的前后获得相同值的原因。
请阅读上面链接的其余文档,以了解哈希码的其他适当(和不适当)用法。
如果要可靠地查看行是否已被修改,则必须保留先前值的副本,并逐列进行比较。对于具有不同列值的行,任何哈希算法都可能导致相同的校验和。
您可以使用DataRowComparer.GetHashCode()
,但是请注意,不能保证100%表示行是否已更改。