prosource

GUID가 모두 0입니까?

probook 2023. 5. 18. 21:07
반응형

GUID가 모두 0입니까?

저는 가이드가 있는 물체를 앞뒤로 보내는 WCF 서비스를 테스트하고 있습니다.웹 앱 테스트 코드에서 다음 작업을 수행하고 있습니다.

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

어떤 이유로 새 Guid()호출하면 다음과 같이 모두 0인 Guid가 생성됩니다.

00000000-0000-0000-0000-000000000000

무엇이 원인일까요?

기본 생성자를 호출하는 대신 정적 메서드를 사용합니다.

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

이를 통해 얻을 수 있는 교훈:

GUID는 참조 유형이 아닌 값 유형입니다.

기본 생성자 호출new S()값 유형에 관계없이 항상 해당 값 유형의 all-zero 형식을 반환합니다.와 논리적으로 같습니다.default(S).

대신 사용해 보십시오.

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

그러면 '실제' GUID 값이 생성됩니다.참조 유형을 새로 만들면 기본값(이 경우 Guid의 경우 모두 0)이 제공됩니다.

새 GUID를 작성하면 GUID의 기본값인 모든 0으로 초기화됩니다.이는 기본적으로 "새" 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's)', 이것은 당신이 보고 있는 행동을 설명해 줄 것입니다.

언급URL : https://stackoverflow.com/questions/7972150/guid-is-all-0s-zeros

반응형