为啥这段代码每次都生成 0000-0000 作为 guid? [复制]

Posted

技术标签:

【中文标题】为啥这段代码每次都生成 0000-0000 作为 guid? [复制]【英文标题】:Why this code is everytime generating 0000-0000 as guid? [duplicate]为什么这段代码每次都生成 0000-0000 作为 guid? [复制] 【发布时间】:2015-02-13 07:43:07 【问题描述】:

为什么这段代码每次都生成 0000-0000 作为 guid?

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

        

【问题讨论】:

因为它是结构的构造函数而不是 GUID 生成器 msdn.microsoft.com/en-us/library/… 这里的简单答案是阅读友好手册。 【参考方案1】:

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

  Guid.NewGuid()

默认为空白。

【讨论】:

【参考方案2】:
new Guid();

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

来自MSDN 文档:

初始化 Guid 结构的新实例。

每次使用新值获取新的 GUID:

Guid.NewGuid();

要测试您是否有新的 Guid,您可以使用Guid.Empty

if (myGuid == Guid.Empty())

旁白

这是另一个有趣的 sn-p,有人告诉我,值类型总是使用 == 来进行相等比较,而对于引用类型,你可以使用 .Equals()。但是,从 Guid 实现的底层来看,使用 .Equals() 似乎非常安全:

    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;
    

我不知道其他人,我一直对你是否应该做==.Equals()感兴趣

【讨论】:

以上是关于为啥这段代码每次都生成 0000-0000 作为 guid? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

复数的漂亮打印

获取GAID得到00000000-0000-0000-0000-000000000000的问题

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

C#写的代码,检索COM类工厂中CLSID为00024500-0000-0000-C000-0000046的组件时失败,原因是出现以下

Swashbuckle Swagger 生成一个实际的 guid