我正在尝试编写一个方法来根据任何给定的字符串生成一个整数。在2个相同的字符串上调用此方法时,我需要该方法两次生成完全相同的整数。我尝试使用.GetHasCode()但是,一旦我将项目移至另一台机器,这是非常不可靠的,因为GetHasCode()为同一字符串返回不同的值碰撞率非常低也很重要。到目前为止,我编写的自定义方法仅在几十万条记录后就会产生冲突。散列值必须是一个整数。字符串哈希值(如md5)会在速度和加载开销方面削弱我的项目。整数散列正用于执行极其快速的文本搜索,我的工作非常出色,但是它目前依赖于.GetHasCode()并且在涉及多台机器时不起作用。任何见解都将不胜感激。
将对象添加到.NET时System.Collections.Generic.Dictionaryclass内部存储了key的hashcode,用于后面的比较。当hashcode在初始插入字典后发生变化时,它通常会变得“不可访问”,并且当存在检查(即使使用相同的引用)返回false时可能会让用户感到惊讶(下面的示例代码)。GetHashCode文档说:TheGetHashCodemethodforanobjectmustconsistentlyreturnthesamehashcodeaslongasthereisnomodificationtotheobjectstatethatdet
我这样声明了一行C#代码inthashcode="apple".GetHashCode();在我的电脑、工作的电脑和friend的电脑上,结果是1657858284。在开发服务器上,结果是1548091822。有没有办法让我告诉项目总是让GetHashCode()yield1657858284,不管它在哪个服务器上?更多笔记起初,我注意到版本存在差异...1657858284结果来自.NET3.5和.NET4.0。1548091822来自.NET2.0。然后我告诉visualstudios2010将项目编译为.net2.0项目,但它仍然给我1657858284。
我正在创建一个正在进行性能测试的库。在其中我生成了一个Dictionary一次。这些项目当前以随机顺序插入。字典在应用程序生命周期内保持不变。然后它经常用于查找项目。查找是库中较大的瓶颈之一。是的,我正在微观优化,但要学习。我想知道是否有更好的方法来获得查找性能?更新我使用dotTrace来衡量性能。报告+dotTrace在我的家用电脑中,所以我这里没有报告(本可以上传到其他地方)。我使用了这里的测试:https://github.com/danielpalme/IocPerformance字典定义可在此处找到:https://github.com/jgauffin/Griffin.C
考虑以下代码:structVec2:IEquatable{doubleX,Y;publicboolEquals(Vec2other){returnX.Equals(other.X)&&Y.Equals(other.Y);}publicoverrideboolEquals(objectobj){if(objisVec2){returnEquals((Vec2)obj);}returnfalse;}//thiswillreturnthesamevaluewhenX,YareswappedpublicoverrideintGetHashCode(){returnX.GetHashCode()
我们遇到了一个奇怪的错误,我们在调试时遇到了问题。我们有一个使用MicrosoftCAB、DevExpress组件和.Net3.5的MDI工作区。如果用户在工作区中打开两个窗口,每个窗口都包含一个UserControl绑定(bind)到两个单独的数据模型,然后最小化它们,第一个最小化的窗口是在第二个窗口时清除它的绑定(bind)字段一个最小化。数据模型的.Equals和.GetHashCode方法已被覆盖,因此两个数据模型被认为是相等的。如果我们改变它使它们独一无二,我们就不会得到这种行为。下面是一些显示问题的示例伪代码vara=newMyWindow();a.DataModel=ne
简短的问题如何为Array实现GetHashCode。详情我有一个覆盖Equals的对象,检查:this.array[n]==otherObject.array[n]对于array中的所有n。自然地,我应该实现互补的GetHashCode。我想知道是否有.NET方法可以做到这一点,或者我是否应该实现自己的方法,比如hash=hash^array[n]澄清我的对象包含一个数组,我对数组元素的GetHashCode很感兴趣。我的数组等效代码仅作为示例-就像我的问题所说,但也许我不清楚,我对GetHashCode(而不是Equals)感兴趣。我说我自然应该实现互补的GetHashCode,因
我在C#中有一个Address类,如下所示:publicclassAddress{publicstringStreetAddress{get;set;}publicstringRuralRoute{get;set;}publicstringCity{get;set;}publicstringProvince{get;set;}publicstringCountry{get;set;}publicstringPostalCode{get;set;}}我正在实现相等性,因此我需要覆盖哈希码。起初我打算使用EJ的哈希码公式,但后来我想:这些都是字符串字段,我不能只使用StringBuilde
伙计们,这是一个棘手的问题!TickZoom系统的一部分必须将每种类型的对象的实例收集到Dictionary类型中。它们的相等性和哈希码必须基于对象的实例,这意味着引用相等而不是值相等。挑战在于系统中的某些对象已覆盖Equals()和GetHashCode()以用作值相等,并且它们的内部值会随时间变化。这意味着它们的Equals和GetHashCode是无用的。如何通用而非侵入性地解决此问题?到目前为止,我们创建了一个结构来包装每个名为ObjectHandle的对象,以便散列到字典中。正如您在下面看到的,我们实现了Equals(),但如何计算哈希码的问题仍然存在。publicstruc
我已将Dictionary(TKey,TValue)用于多种用途。但是我没有遇到任何实现GetHashCode()的场景,我认为这是因为我的键是主要类型,如int和string。我很想知道应该使用自定义对象作为键并因此实现方法GetHashCode()Equals()等的场景(真实世界的示例)。而且,使用自定义对象作为键是否需要实现这些功能? 最佳答案 只要默认Object.Equals,您就应该覆盖Equals和GetHashCode(引用相等性测试)是不够的。例如,当您的键类型是自定义类型并且您希望两个键被视为相等时,即使它们不