Guid는 모두 0입니까?
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
참고 URL : https://stackoverflow.com/questions/7972150/guid-is-all-0s-zeros
'IT story' 카테고리의 다른 글
Visual Studio 2012에서 내 테스트를 찾지 못하는 이유는 무엇입니까? (0) | 2020.04.23 |
---|---|
이미 체크인 한 디렉토리의 내용을 무시 하시겠습니까? (0) | 2020.04.23 |
S3 정적 웹 사이트 호스팅 Index.html에 모든 경로 라우팅 (0) | 2020.04.23 |
.svn 디렉토리를 무시하기 위해`find`를 어떻게 얻을 수 있습니까? (0) | 2020.04.23 |
몽구스 : findOneAndUpdate가 업데이트 된 문서를 반환하지 않습니다 (0) | 2020.04.23 |