[C#] Guid.NewGuid () 대 new Guid ()

차이 무엇 Guid.NewGuid()new Guid()?

어느 것이 선호됩니까?



답변

new Guid() “빈”all-0 guid를 만듭니다 (00000000-0000-0000-0000-000000000000은 그다지 유용하지 않습니다).

Guid.NewGuid() 고유 한 값으로 원하는 실제 guid를 만듭니다.


답변

Guid.NewGuid() 충돌 가능성이 매우 낮도록 설계된 알고리즘을 사용하여 새 UUID를 만듭니다.

new Guid() 모두 0 인 UUID를 만듭니다.

일반적으로 UUID의 요점이므로 전자를 선호합니다 (물론 다른 곳에서받지 않는 한).

실제로 0이 아닌 UUID를 원하는 경우가 있지만이 경우 의도에 대해 더 명확 Guid.Empty하거나 default(Guid)분명한 사람이 있으며 고유 한 값이 생성 될 것으로 기대하는 사람이 읽을 가능성이 적습니다.

이처럼 new Guid()명확성이 부족하기 때문에 그다지 유용하지는 않지만 모든 0과 null 값을 반환하는 매개 변수가없는 생성자가없는 값 유형을 가질 수는 없습니다.

편집 : 실제로, 모든 것을 0과 null로 설정하지 않는 값 유형에 매개 변수가없는 생성자를 가질 수 있지만 C #에서는 할 수 없으며 호출 시점과 호출 시점에 대한 규칙 생성 된 모든 구조체가 혼란 스럽기 때문에 어쨌든 좋은 생각이 아닙니다.


답변

[이것은 구식 스레드라는 것을 이해하고 좀 더 자세한 내용을 추가합니다.] Mark와 Jon Hanna의 두 가지 대답은 차이점을 요약합니다.

Guid.NewGuid()

결국 CoCreateGuid (Ole32에 대한 COM 호출) ( 여기서는 여기 참조)를 호출 하고 실제 작업은 UuidCreate에 의해 수행됩니다 .

Guid.Empty는 Guid에 모든 0이 포함되어 있는지 확인하는 데 사용됩니다. 이는 해당 Guid의 가치를 새로운 Guid () 와 비교하여 수행 할 수도 있습니다.

따라서 고유 식별자 가 필요한 경우 에는 Guid.NewGuid ()입니다.


답변

Guid.NewGuid()의도 한대로 GUID를 작성합니다.

Guid.NewGuid()Guid객체를 생성하고 호출 CoCreateGuid하여 객체를 초기화 하고 객체를 반환합니다.

new Guid() 그냥 빈 GUID를 만듭니다 (모두 0이라고 생각합니다).

나는 생성자를 그대로 공개해야한다고 생각 Guid합니다 struct.


답변