c# - DataRow GetHashCode() 方法值在编辑行后不会改变

标签 c# .net datatable hashcode

我有一个数据表,我想在编辑数据表的行之前和之后比较每行的哈希码 这就是我获取 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 时,它们完全相同,即使我已经对行进行了编辑。如何捕获编辑内容?或者我怎样才能原始获取一行中值的哈希码?也许我没有正确获取哈希码,请帮忙。

最佳答案

我假设您没有使用自定义 DataRow上课,你在期待GetHashcode根据 DataRow 的内容返回某种“校验和”值.

那不是GetHashCode确实如此,也不应该。哈希码用于将项目存储在 Dictionary 中。 或其他基于哈希的集合。

来自MSDN :

A hash code is a numeric value that is used to insert and identify an object in a hash-based collection such as the Dictionary<TKey, TValue> class, the Hashtable class, or a type derived from the DictionaryBase class.

GetHashCode 的默认行为为对象的相等实例返回相等的哈希码,而不管该对象内的任何基础值如何,这就是为什么您在更改之前和之后获得相同值的原因。

请阅读上面链接的其余文档,了解哈希码的其他适当(和不适当)用途。

如果您想要可靠查看一行是否已被修改,您必须保留先前值的副本并逐列比较它们 。任何哈希算法都可能对具有不同列值的行产生相同的校验和。

可以使用 DataRowComparer.GetHashCode() ,但请注意,它不能 100% 保证指示行是否已更改。

关于c# - DataRow GetHashCode() 方法值在编辑行后不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496630/

相关文章:

c# - 源文件 X 在 c# 中的 Windows 系统文件保护下?

当应用程序最小化到托盘时,C# MessageBox 显示在前面

javascript - jQuery DataTables - 当日期也是一个链接时排序不起作用

.net - 搜索旧的 .Net 库

c# - 更改程序集/文件版本后保留用户设置

c# - 如何更新DataTable中的所有自增列?

c# 使用LiNQ删除Datatable中的多行

c# - 如何拆分非数字作为分隔符的字符串?

c# - 通过更改 Razor 中的 url 获取 View

c# - 什么是NullReferenceException,如何解决?