Kum*_*mar 2 .net c# gethashcode base-class-library
我需要为应用程序启动和关闭时管理状态的对象分配一个guid看起来我可以使用字典将查找值存储在字典中
dictionary<int,Guid>.Add(instance.GetHashCode(), myGUID());
Run Code Online (Sandbox Code Playgroud)
这里有什么潜在的问题需要注意吗?
这不需要在执行运行之间持续存在,只需要像这样的guid
在应用程序终止之前,gethashcode()和查找guid以更新()或插入()到持久性引擎USING GUID
唯一的假设是gethashcode()在进程运行时保持一致
在相同的对象类型(从窗口派生)上调用gethashcode()
List<WeakReference>在启动时希望上面说清楚.
所以现在的问题是 - 为什么不只是存储HashCode(仅用户控件)而不是WeakReference在通过列表迭代时消除空引用的测试
更新3 - 谢谢所有,最后将使用弱引用
您似乎假设哈希码是唯一的.散列码不起作用.有关更多详细信息,请参阅Eric Lippert 关于GetHashCode指南和规则的博客文章,但基本上您应该只为保持良好行为的类型做出假设 - 即如果两个对象具有不同的哈希码,则它们肯定是不相等的.如果它们具有相同的哈希码,则它们可能相等,但可能不相同.
编辑:如上所述,您也不应该在执行运行之间保留哈希码.面对重启,无法保证他们会保持稳定.目前还不是很清楚你正在做什么,但这听起来不是一个好主意.
编辑:好的,你现在已经注意到它不会持久,所以这是一个好的开始 - 但你仍然没有处理哈希码冲突的可能性.你为什么要打电话GetHashCode()?为什么不直接添加对字典的引用?