Guids를 사용하여 개체를주고받는 일부 WCF 서비스를 테스트하고 있습니다. 내 웹 앱 테스트 코드에서 다음을 수행하고 있습니다.
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
어떤 이유로 new Guid ()를 호출하면 다음과 같이 모두 0으로 Guid 를 생성합니다.
00000000-0000-0000-0000-000000000000
이 문제의 원인은 무엇입니까?
답변
Guid.NewGuid()
기본 생성자를 호출하는 대신 정적 메소드 를 사용하십시오 .
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = Guid.NewGuid()
});
답변
이것으로부터 배우는 교훈 :
1) Guid는 참조 유형이 아닌 값 유형입니다.
2) new S()
모든 값 유형 에서 기본 생성자 를 호출하면 항상 그 값 유형의 모든 제로 형식을 반환합니다. 논리적으로와 동일합니다 default(S)
.
답변
대신 이것을 시도하십시오 :
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid.NewGuid()
});
‘실제’Guid 값이 생성됩니다. 참조 유형을 새로 만들면 기본값이 제공됩니다 (이 경우 Guid의 경우 모두 0 임).
새 Guid를 만들면 Guid의 기본값 인 모든 0으로 초기화됩니다. 기본적으로 “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
이것을 int와 같은 일을하는 것과 비교하십시오 :
int i1; // i1 is 0
int i2 = new int(); // i2 is 0
int i3 = default(int); // i3 is 0
답변
시도해보십시오 :
Guid foo = Guid.NewGuid();
답변
이것이 몇 번이나 잡혔는 지 말할 수 없습니다. 나를.
Guid myGuid = Guid.NewGuid();
답변
완전한 정신으로, 사용하도록 지시하는 대답 Guid.NewGuid()
은 정확합니다.
후속 편집을 처리 할 때 RequestObject
수업 코드를 게시해야합니다 . 귀하의 guid 속성이로 표시 DataMember
되지 않았으므로 와이어를 통해 직렬화되지 않는 것 같습니다. 모든 default(Guid)
것과 동일 하기 때문에 , 이것은 당신이보고있는 행동을 설명합니다.new Guid()
0