Guid全是0(零)?

我正在testing一些WCF服务,来回发送GUID的对象。 在我的Web应用程序testing代码中,我正在执行以下操作:

var responseObject = proxy.CallService(new RequestObject { Data = "misc. data", Guid = new Guid() }); 

出于某种原因,对新的Guid()的调用将生成如下所示的所有0(零)的Guid

00000000-0000-0000-0000-000000000000

什么可能导致这个?

使用静态方法Guid.NewGuid()而不是调用默认构造函数。

 var responseObject = proxy.CallService(new RequestObject { Data = "misc. data", Guid = Guid.NewGuid() }); 

经验教训:

1)Guid是一个值types,而不是引用types。

2)调用任何值types的默认构造函数new S()总是会返回该值types的全零forms,无论它是什么。 它在逻辑上与default(S)相同。

试试这个:

  Guid = Guid.NewGuid(); 

这将产生一个“真正的”Guid值。 当你新build一个引用types时,它会给你默认值(在这种情况下,Guid是全零)。

当你创build一个新的Guid时,它将初始化为全部的零,这是Guid的默认值。 它基本上和创build一个“新”int(这是一个值types,但你可以做到这一点)是一样的:

 Guid g1; // g1 is 00000000-0000-0000-0000-000000000000 Guid g2 = new Guid(); // g2 is 00000000-0000-0000-0000-000000000000 Guid g3 = default(Guid); // g3 is 00000000-0000-0000-0000-000000000000 Guid g4 = Guid.NewGuid(); // g4 is not all zeroes 

比较这与int做同样的事情:

 int i1; // i1 is 0 int i2 = new int(); // i2 is 0 int i3 = default(int); // i3 is 0 

尝试做:

 Guid = Guid.NewGuid(); 

不能告诉你有多less次被抓到。 我。

 Guid myGuid = Guid.NewGuid(); 

本着完整的精神,指导您使用Guid.NewGuid()的答案是正确的。

在处理你的后续编辑时,你需要发布你的RequestObject类的代码。 我怀疑你的GUID属性没有标记为DataMember ,因此没有被串行化。 由于default(Guid)new Guid() (即全0 )相同,这可以解释你所看到的行为。