为啥这段代码每次都生成 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的组件时失败,原因是出现以下