C# 为什么此代码每次都生成0000-0000作为guid?

C# 为什么此代码每次都生成0000-0000作为guid?,c#,C#,为什么此代码每次都生成0000-0000作为guid static int Main(string[] args) { Guid obj = new Guid(); Console.WriteLine("New Guid is " + obj.ToString()); Console.ReadLine(); } 您必须执行以下操作才能获得新的Guid Guid.NewGuid()

为什么此代码每次都生成0000-0000作为guid

 static int Main(string[] args)
        {
            Guid obj = new Guid();
            Console.WriteLine("New Guid is " + obj.ToString());
            Console.ReadLine();

        }

您必须执行以下操作才能获得新的Guid

  Guid.NewGuid()
默认情况下,它为空

new Guid();
这只是实例化了一个新的Guid结构。它不会为它生成任何值

从文档中:

初始化Guid结构的新实例

要每次使用新值获取新GUID,请执行以下操作:

Guid.NewGuid();
要测试是否有新的Guid,可以使用
Guid.Empty

if (myGuid == Guid.Empty())

旁白

下面是另一个有趣的片段,我被告知值类型总是使用
=
进行相等比较,而引用类型可以使用
.Equals()
。但是,在Guid实现的底层,使用
.Equals()
似乎非常安全:


我不知道还有其他人,我一直对你是应该做
=
还是
.Equals()

感兴趣,因为它是一个结构的构造函数,而不是GUID生成器。这里的简单答案是阅读友好的手册。
    public bool Equals(Guid g)
    {
        // Now compare each of the elements
        if(g._a != _a)
            return false;
        if(g._b != _b)
            return false;
        if(g._c != _c)
            return false;
        if (g._d != _d)
            return false;
        if (g._e != _e)
            return false;
        if (g._f != _f)
            return false;
        if (g._g != _g)
            return false;
        if (g._h != _h)
            return false;
        if (g._i != _i)
            return false;
        if (g._j != _j)
            return false;
        if (g._k != _k)
            return false;

        return true;
    }