在C#中使用Guid为实例生成唯一ID

时间:2016-05-15 11:19:38

标签: c# methods instance guid

我有一个关于Guid作为生成ID的方法的问题。我需要能够为给定类的每个实例生成一个新的唯一ID(我希望有几百个实例)。我在下面提供了我的代码:

class Program
{
    static void Main(string[] args)
    {
        Instance instance1 = new Instance();
        Console.WriteLine(instance1.ID);
        Instance instance2 = new Instance();
        Console.WriteLine(instance2.ID);
        Console.ReadKey();
    }
}
public static class GenerateID
{
    public static string NewID()
    {
        Guid guid = Guid.NewGuid();
        string id = guid.ToString();
        return id;
    }
}
public class Instance
{
    public string ID = GenerateID.NewID();
}

从我所看到的,这个方法有效,每次运行代码时都会生成两个唯一的ID,但我无法对此进行广泛的测试,因为我读到Guid能够生成类似于badgilion的错误的ID。

我实施上述方法的方式是否确保每次时ID 都是唯一的?或者有碰撞的机会吗?如果是这样,那么为实例分配唯一ID的更好方法是什么?

编辑:好的,所以我从ppl的答案中了解到,Guid本身并不是100%独特的(谢谢,我一定要仔细阅读),但我的问题是方法是否是我的用于获取ID可能会增加生成相同的两个ID的机会?或者这是获取唯一ID的好方法吗?

2 个答案:

答案 0 :(得分:2)

one,使用MSDN的话,“非常高度的确定性”,是唯一的。

.NET调用调用WIN32的Guid.NewGuid()(调用CoCreateGuid()),其评论如下:

MSDN:

  

在很高的确定性下,此函数返回一个唯一值 - 在同一个或任何其他系统上没有其他调用(联网与否),应该返回相同的值 - {{ 3}}

答案 1 :(得分:0)

您生成的每个GUID都包含32个十六进制数字的序列,由2 ^ 128个数字组成!因此获得重复GUID的机会几乎为零。考虑到由128位随机数组成的GUID,即使您同时生成它们,也可以将重复的GUID设置为零