有没有办法从Guids列表中生成Guid?

时间:2015-06-04 14:58:45

标签: c# hash guid

我有一个他们有id的guids对象列表。我想使用此对象列表中的ID来创建一个我可以使用的guid,确保列表没有更改。如果删除/添加了一个对象,那么guid会有所不同。想到的是使用哈希。也许我应该使用哈希,但我想知道这是否可能比生成哈希更快?

编辑: 我从存储过程中获取此列表。然后将对象列表存储到内存缓存中。每个用户将根据此生成的值在cookie中验证其本地值,以确保列表仍然相同。

2 个答案:

答案 0 :(得分:2)

您可以编写自己的类来访问列表或哈希集或任何其他支持此类的集合:

class GuidList // You can implement IReadOnlyList
{
    public bool Dirty { get; private set;}
    // Omit if implementing `IReadOnlyList`
    public Guid[] Guids { get { return guidCollection.ToArray() }
    public void Add(Guid guid) // Do similarly for remove
    {
        Dirty = true;
        // implement logic
    }

}

这是一种信息隐藏形式。

答案 1 :(得分:1)

当您需要知道对象是否与以前完全相同时,您不能单独依赖哈希 - 对象的哈希允许您明确地告诉对象是不同的,但它并不保证对象是相同的。

通常有几种方法可以解决这个问题:

  • 哈希值上经常发生的小的潜在冲突是可以接受的,您可以使用足够长的哈希值来满足您的要求。通常像SHA256这样的加密散列函数提供足够低的碰撞率以便与它一起使用。如果需要,这样的值很容易适合HTTP cookie。
  • 如果对象足够小(即几K)将整个对象发送到客户端可能是一个选项(将给你机会在回发上进行精确比较)。
  • 如果您能够以某种方式明确地对某些特定对象保证唯一(修改日期,具有自动增量的当前顺序更新)对象的版本,则可以保留该信息。通常这种版本控制信息很小,很容易用cookie发送。

注意:根据您的要求,您可能需要加密/签署Cookie值(可能使用salt)以防止客户端代码篡改您的Cookie值。