代码之家  ›  专栏  ›  技术社区  ›  shannon

GetHashCode只是这里的货物崇拜吗?

  •  5
  • shannon  · 技术社区  · 12 年前
    HttpContext.Current.Items["ctx_" + HttpContext.Current.GetHashCode().ToString("x")]
    

    我看到了这个确切的代码 all ... over ... the ... place 但我一定是忽略了什么。在对这些帖子的回应中,质疑使用HttpContext的适当性是很常见的,但没有人指出GetHashCode是多余的,固定字符串就可以了。

    我在这里俯瞰什么?


    编辑:问题是,GetHashCode()对于每个HttpContext.Current都是一样的,那么为什么要在我提供的四个链接中使用GetHashCode?其中一些是投入了大量工作的帖子,所以我觉得它们可能是在解决我忽略的一些线程或上下文问题。我不明白为什么只有HttpContext.Current.Items[“ctx_”]不能完全一样。

    2 回复  |  直到 8 年前
        1
  •  1
  •   usr    12 年前

    这太可怕了。例如, HttpContext.Current.Items 是电流的本地 HttpContext 无论如何,因此需要尝试使密钥“更加独特”。其次,根据这种技术的使用方式,密钥偶尔会发生冲突,从而导致虚假的、不可调试的故障。

    如果你 需要 一个唯一的密钥(可能是因为您正在开发一个库),使用saner解决方案 Guid.NewGuid().ToString() 。这保证有效,甚至更简单。

        2
  •  1
  •   Piotr Perak    12 年前

    因此,要回答您的问题:)

    使用GetHashcode创建密钥并没有多大意义。 您提供链接的帖子的作者可能希望创建唯一的密钥。但这样做并不能阻止其他团队成员在代码库的其他地方使用相同的密钥。

    我认为最好只使用手写的长键。而不是

    ["ctx_" + HttpContext.Current.GetHashCode().ToString("x")]
    

    只需使用

    ["object_context_key"]
    

    或者类似的东西。这样你就知道它到底是什么了(这可能在例如死后调试中很有用),我还认为,如果你必须想出一些长密钥,它可能会比使用GetHashCode的密钥“更独特”。