Why are there dashes in a .NET GUID?
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.
Introduction
The dashes in a .NET GUID (e.g., 550e8400-e29b-41d4-a716-446655440000) are formatting separators defined by RFC 4122 (the UUID standard). They divide the 128-bit value into five groups that correspond to specific fields in the UUID structure: time-low, time-mid, time-hi-and-version, clock-seq, and node. The dashes are part of the string representation only — the underlying data is a 16-byte binary value with no dashes. .NET's Guid.ToString() includes dashes by default, but you can format a GUID without them.
GUID Structure
The 8-4-4-4-12 grouping is not arbitrary — each section encodes a specific field from the UUID specification.
Version Field
The first digit of the third group indicates the UUID version:
1= time-based3= MD5 hash4= random (most common, whatGuid.NewGuid()creates)5= SHA-1 hash7= Unix timestamp-based (newer)
Formatting GUIDs in .NET
| Format | Example | Use Case |
D (default) | 550e8400-e29b-... | Human-readable, logs, databases |
N | 550e8400e29b... | URLs, filenames, compact storage |
B | {550e8400-e29b-...} | Windows Registry, COM |
P | (550e8400-e29b-...) | Some database systems |
X | {0x550e8400,...} | C struct initialization |
Creating and Parsing GUIDs
GUID in Databases
GUIDs Without Dashes
Why Not Just Remove the Dashes?
The dashes serve readability and validation purposes:
- Readability:
550e8400-e29b-41d4-a716-446655440000is easier to visually parse than550e8400e29b41d4a716446655440000 - Quick version identification: The third group starts with the version digit (
4in41d4) - Copy-paste accuracy: Dashes help verify you copied the entire GUID
- Standard compliance: RFC 4122 defines the dashed format as canonical
Common Pitfalls
- Comparing string representations:
"550E8400"and"550e8400"are the same GUID but different strings. Always compare usingGuid.Equals()or==onGuidobjects, never on string representations. - Database storage as strings: Storing GUIDs as
CHAR(36)wastes space (36 bytes vs 16 bytes forUNIQUEIDENTIFIER/BINARY(16)). Use the native GUID type orBINARY(16)for efficient storage. - Sequential GUIDs for clustered indexes: Random GUIDs (
Guid.NewGuid()) cause index fragmentation in SQL Server because inserts scatter across the B-tree. UseNEWSEQUENTIALID()in SQL Server orGuid.CreateVersion7()(.NET 9+) for sequential GUIDs. - Byte order confusion: .NET's
Guid.ToByteArray()uses mixed-endian format (first three groups are little-endian, last two are big-endian). This differs from RFC 4122's network byte order. Useguid.TryWriteBytes(span, bigEndian: true)in .NET 9+ for standard byte order. - Assuming GUIDs are always unique: While the probability of collision is astronomically low (2^122 possible v4 UUIDs), using a weak random generator or creating GUIDs in constrained environments can reduce uniqueness. Always use
Guid.NewGuid()which uses a cryptographic random source.
Summary
- Dashes in GUIDs follow the RFC 4122 standard, dividing the 128-bit value into five meaningful fields
- The 8-4-4-4-12 format encodes time, version, clock sequence, and node information
- Use
guid.ToString("N")for a dashless 32-character hex string - Use
guid.ToString("D")(default) for the standard dashed format - GUIDs are 16 bytes internally — dashes exist only in the string representation
- The third group's first hex digit reveals the UUID version (4 = random)
Related reading
- Why are unsigned int's not CLS compliant?
- Why Async.StartChild does not take CancellationToken?
- Why C fails to compare two object types with each other but VB doesn't?
- Why C implements methods as non-virtual by default?
- Why C is not allowing non-member functions like C
- Why C structs cannot be inherited?
- Why can I initialize a List like an array in C?
- Why can the C HttpClient not call this URL always times out?

OOD Fundamentals
Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.