在编辑行后,DataRow GetHashCode()方法的值不会更改

 亚璨的秘密 发布于 2023-01-06 22:37

我有一个数据表,我想在对数据表的行进行编辑之前和之后比较每一行的哈希码。这就是我获取HashCode的方法,将其与键一起存储在字典中,然后返回

        Dictionary mydict1= new Dictionary();

        foreach (DataRow row in DataTable.Rows)
        {
            mydict.Add(row["Name"].ToString(), row.GetHashCode());
        }

        return mydict1;

编辑数据表的行中的值之后,我再次调用相同的函数,并获取行的所有哈希码值并将其存储在mydict2中。当我比较mydict1和mydict2时,它们是完全相同的,甚至以为我已经对行进行了编辑。如何捕获编辑内容?或者我如何才能最初获取值的哈希码?也许我没有正确获得哈希码,请帮忙。

1 个回答
  • 我假设您没有使用自定义DataRow类,并且期望GetHashcode基于的内容返回某种“校验和”值DataRow

    那不是什么GetHashCode,也不应该。哈希码用于将项目存储在一个Dictionary或其他基于哈希的集合中。

    从MSDN:

    哈希码是一个数字值,用于在基于哈希的集合中插入和标识对象,例如Dictionary<TKey, TValue>类,Hashtable类或从DictionaryBase该类派生的类型。

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

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

    如果要可靠地查看行是否已被修改,则必须保留先前值的副本,并逐列进行比较。对于具有不同列值的行,任何哈希算法都可能导致相同的校验和。

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

    2023-01-06 22:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有