C# 为什么此代码每次都生成0000-0000作为guid?
为什么此代码每次都生成0000-0000作为guidC# 为什么此代码每次都生成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()
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;
}