我尝试了一批随机字符串,我得到的所有值都是正数,但我想知道:String.GetHashCode()会返回负数还是0?由于返回值是int,所以我猜可能是,所以如果是这样的话,我得换个逻辑了。如果您有答案或有一些官方来源,请分享 最佳答案 是的,它可以返回负值。您不得有任何与GetHashCode()值一起工作的逻辑。GetHashCode()不保证是唯一的,并且可以在构建之间更改。GetHashCode()必须被视为一个不透明的token,可以与其他哈希组合或修改成哈希表。 关于c#-s
大家好,我一直在阅读关于在.NET中为对象实现GetHashCode()覆盖的最佳方法,我遇到的大多数答案都涉及以某种方式将数字从数字类型的成员中拼凑出来一个方法。问题是,我有一个使用字母数字字符串作为其键的对象,我想知道仅对以字符串作为键的对象使用内部ID是否存在根本性错误,如下所示?//OverrideGetHashCode()toreturnapermanent,uniqueidentifierfor//thisobject.staticprivateintm_next_hash_id=1;privateintm_hash_code=0;publicoverrideintGetH
我有两个客户端从相同byte[]创建IPAddress实例并通过WCF将它发送到服务器(使用DataContractSerializer).在服务器上,这些IPAddress实例作为键插入字典中,但出于某种原因,它们被添加为不同的键。记录时我发现它们相等,但GetHashCode返回不同的结果。varclient1Address=//sentfromclient1varclient2Address=//sentfromclient2Console.WriteLine(client1Address.Equals(client2Address));Console.WriteLine(cli
我正在阅读EffectiveC#还有一条关于Object.GetHashCode()的评论我不明白:Object.GetHashCode()usesaninternalfieldintheSystem.Objectclasstogeneratethehashvalue.Eachobjectcreatedisassignedauniqueobjectkey,storedasaninteger,whenitiscreated.Thesekeysstartat1andincrementeverytimeanewobjectofanytypegetscreated.Theobjectident
我有以下代码:varfoo=(fromdatainpivotedData.AsEnumerable()selectnew{Group=data.Field("Group_Number"),Study=data.Field("Study_Name")}).Distinct();正如预期的那样,这将返回不同的值。但是,我想要的是返回一个强类型集合而不是匿名类型,所以当我这样做时:varfoo=(fromdatainpivotedData.AsEnumerable()selectnewBarObject{Group=data.Field("Group_Number"),Study=data.
publicclassAddress{publicstringContactName{get;privateset;}publicstringCompany{get;privateset;}//...publicstringZip{get;privateset;}}我想实现不同地址的概念,所以我覆盖了Equals()以测试所有字段中不区分大小写的相等性(因为这些是美国地址,我使用Ordinal而不是InvariantCulture以获得最佳性能):publicoverrideboolEquals(Objectobj){if(obj==null||this.GetType()!=obj.
假设使用相同的字符串值,GetHashCode()的返回值是否保证一致?(C#/ASP.NET)我今天将我的代码上传到服务器,令我惊讶的是我不得不重新索引一些数据,因为我的服务器(win200864位)返回的值与我的台式计算机不同。 最佳答案 如果我没记错的话,GetHashCode在给定相同值的情况下是一致的,但不能保证在不同版本的框架中保持一致。来自String.GetHashCode()上的MSDN文档:ThebehaviorofGetHashCodeisdependentonitsimplementation,whichmi
我需要一个C#的Random类实例的种子,我了解到大多数人为此使用当前时间的滴答计数器。但这是一个64位值,种子需要是一个32位值。现在我认为返回int的GetHashCode()方法应该为其对象提供合理分布的值,这可以用来避免仅使用较低的32-滴答计数的位。但是,我找不到有关Int64数据类型的GetHashCode()的任何信息。所以,我知道这无关紧要,但接下来的工作是否会像我想的那样好(我不能试错随机性),或者它可能与使用(int)DateTime.Now.Ticks作为种子?或者它甚至可能更糟?谁能阐明这一点。intseed=unchecked(DateTime.Now.Tic
这需要一定的背景知识-请多多包涵!我们有一个使用EF的n层WPF应用程序-我们通过dbContext将来自数据库的数据加载到POCO类中。dbContext被销毁,然后用户可以编辑数据。我们使用JulieLerman在她的书“ProgrammingEntityFramework:DBContext”中建议的“状态绘画”,以便在将根实体添加到新的dbContext中进行保存时,可以设置是否添加,修改或保留每个子实体,等等。。我们第一次执行此操作(2012年11月!)时遇到的问题是,如果要添加到dbContext的根实体具有同一子实体的多个实例(即,链接到用户的“任务”记录),“状态历史记
有anestablishedguideline获取哈希码不应分配内存,因为这会通过调用垃圾收集器对哈希表查找产生负面影响。然而,这个确切的失败是我所看到的我使用System.Collections.Generic.Dictionary的应用程序的配置文件在一个非常紧凑的循环中,我在分析器结果中发现以下内容:[3.47%]TryGetValue(TKey,TValue&)(...字典)[3.47%]FindEntry(TKey)(...字典)[3.47%]GetHashCode(string)(System.CultureAwareComparer)[3.46%]GetHashCodeO