Did*_*xis 224 .net c# wcf web-services guid
我正在测试一些WCF服务,它们来回传送带有Guids的对象.在我的网络应用程序测试代码中,我正在执行以下操作:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
Run Code Online (Sandbox Code Playgroud)
出于某种原因,对新Guid()的调用是生成Guids,其全部为0(零),如下所示:
00000000-0000-0000-0000-000000000000
可能是什么导致了这个?
Mar*_*ers 403
使用静态方法Guid.NewGuid()
而不是调用默认构造函数.
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = Guid.NewGuid()
});
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 107
从中吸取教训:
1)Guid是值类型,而不是引用类型.
2)new S()
在任何值类型上调用默认构造函数总是会返回该值类型的全零形式,无论它是什么.它在逻辑上是相同的default(S)
.
Joh*_*hnD 56
试试这个:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid.NewGuid()
});
Run Code Online (Sandbox Code Playgroud)
这将生成一个"真正的"Guid值.当你新建一个引用类型时,它会给你默认值(在这种情况下,对于Guid来说都是零).
当您创建新的Guid时,它会将其初始化为全零,这是Guid的默认值.它与创建"new"int基本相同(这是一种值类型,但无论如何都可以这样做):
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
Run Code Online (Sandbox Code Playgroud)
比较这与使用int做同样的事情:
int i1; // i1 is 0
int i2 = new int(); // i2 is 0
int i3 = default(int); // i3 is 0
Run Code Online (Sandbox Code Playgroud)
Mat*_*wdy 19
不能告诉你这次抓到了多少次.我.
Guid myGuid = Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)
Ada*_*son 11
本着完成的精神,指导您使用的答案Guid.NewGuid()
是正确的.
在处理后续编辑时,您需要发布RequestObject
课程代码.我怀疑你的guid属性没有标记为a DataMember
,因此没有通过网络序列化.由于default(Guid)
与new Guid()
(即所有0
的)相同,这可以解释您所看到的行为.
归档时间: |
|
查看次数: |
92934 次 |
最近记录: |