【发布时间】:2014-06-30 18:31:08
【问题描述】:
我有一个数据表,我想在对数据表的行进行编辑之前和之后比较每一行的哈希码 这就是我获取 HashCode 的方式,将其与键一起存储在字典中,然后返回
Dictionary<string, int> mydict1= new Dictionary<string, int>();
foreach (DataRow row in DataTable.Rows)
{
mydict.Add(row["Name"].ToString(), row.GetHashCode());
}
return mydict1;
编辑数据表行中的值后,我再次调用相同的函数并获取行的所有哈希码值并将其存储在 mydict2 中。 当我比较 mydict1 和 mydict2 时,它们完全相同,即使我已经对行进行了编辑。如何捕获编辑?或者我怎样才能得到一行中值的哈希码?也许我没有正确获取哈希码,请帮助。
【问题讨论】:
-
您不应该使用
Object.GetHashCode()提供的哈希以这种方式比较对象。来自 MSDN “不要测试哈希码的相等性以确定两个对象是否相等。(不相等的对象可以具有相同的哈希码。)要测试相等,请调用 ReferenceEquals 或 Equals 方法。” -
“我想在对数据表的行进行编辑之前和之后比较每一行的哈希码” 为什么要这样做?这听起来像XY Problem 告诉我们您认为比较哈希码是解决方案的问题,我们会告诉您解决该问题的正确方法。
-
如果您想确定哪些行已被修改,您可以改用
DataRow.RowState。 -
我想知道行是否被修改,以及那些已经被修改的行,保存到数据库。你知道我怎样才能得到行的校验和吗? Datarow.Rowstate 对我没有帮助。
-
"Datarow.Rowstate 对我的情况没有帮助" 为什么不呢?
标签: c# .net datatable hashcode