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
)相同,这可以解释你所看到的行为。