首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C# 中 GUID 的全面解析:生成、格式化、Net9的V7版本与应用场景

C# 中 GUID 的全面解析:生成、格式化、Net9的V7版本与应用场景

作者头像
郑子铭
发布2025-05-22 10:08:23
发布2025-05-22 10:08:23
1.6K0
举报

1. 什么是 GUID?

GUID(Globally Unique Identifier,全局唯一标识符)是一种 128 位的数字,用于标识全局范围内唯一的对象。常用于数据库表中的主键、分布式系统中的唯一标识符、软件组件的标识等场景。

在 C# 中,System.Guid 类提供了对 GUID 的生成和操作支持。GUID 的主要特点包括:

  • 唯一性:理论上,生成的 GUID 是全局唯一的。
  • 固定长度:GUID 的长度为 128 位(16 字节)。
  • 多种格式:GUID 可以以多种格式输出,适应不同的使用场景。

从 .NET 9 开始的新特性:Guid V7

.NET 9 引入了基于时间戳和随机值的 Guid 版本 7(Guid V7),使其更适合关系型数据库。Guid V7 的值是顺序的,减少了数据库索引的碎片化,从而提高了性能。

代码语言:javascript
复制
Guid guid7 = Guid.CreateVersion7();
Console.WriteLine(guid7);

2. 如何生成 GUID?

2.1 使用 Guid.NewGuid()

Guid.NewGuid() 是生成 GUID 的最常用方法:

代码语言:javascript
复制
using System;

Guid guid = Guid.NewGuid();
Console.WriteLine("生成的 GUID: " + guid); 
// 示例输出: 3F2504E0-4F89-11D3-9A0C-0305E82C3301

2.2 从字符串转换为 GUID

可以通过 Guid.ParseGuid.TryParse 将字符串转换为 GUID:

代码语言:javascript
复制
string guidString = "123e4567-e89b-12d3-a456-426614174000";
Guid guid = Guid.Parse(guidString);
Console.WriteLine(guid.ToString());

2.3 从字节数组创建 GUID

代码语言:javascript
复制
byte[] bytes = new byte[];
Random random = new Random();
random.NextBytes(bytes);
Guid guid = new Guid(bytes);
Console.WriteLine(guid.ToString());

3. GUID 的格式化输出

GUID 支持多种格式化输出方式,可以通过 ToString 方法指定格式:

3.1 常见格式化选项

格式化选项

描述

示例输出

D

默认格式,带连字符的 32 个字符

f368a3ad-d7df-4655-a41a-e610a6c7ae83

N

不带连字符的 32 个字符

f368a3add7df4655a41ae610a6c7ae83

B

被大括号包围的 GUID

{f368a3ad-d7df-4655-a41a-e610a6c7ae83}

P

被圆括号包围的 GUID

(f368a3ad-d7df-4655-a41a-e610a6c7ae83)

X

十六进制格式,带大括号和逗号分隔

{0xf368a3ad,0xd7df,0x4655,{0xa4,0x1a,...}}

3.2 示例

代码语言:javascript
复制
Guid guid = Guid.NewGuid();

Console.WriteLine("Default (D): " + guid.ToString("D"));
Console.WriteLine("No Dashes (N): " + guid.ToString("N"));
Console.WriteLine("Braces (B): " + guid.ToString("B"));
Console.WriteLine("Parentheses (P): " + guid.ToString("P")); 
Console.WriteLine("Uppercase Hex (X): " + guid.ToString("X"));

运行结果:

代码语言:javascript
复制
Default (D): f368a3ad-d7df-4655-a41a-e610a6c7ae83
No Dashes (N): f368a3add7df4655a41ae610a6c7ae83
Braces (B): {f368a3ad-d7df-4655-a41a-e610a6c7ae83}
Parentheses (P): (f368a3ad-d7df-4655-a41a-e610a6c7ae83)
Uppercase Hex (X): {0xf368a3ad,0xd7df,0x4655,{0xa4,0x1a,...}}

3.3 全零 GUID

Guid.Empty 表示全零的 GUID:

代码语言:javascript
复制
Console.WriteLine(Guid.Empty);
// 输出: 00000000-0000-0000-0000-000000000000

4. GUID 的常见应用场景

  1. 1. 数据库主键 GUID 常用于分布式数据库的主键,避免 ID 冲突。Guid V7 的顺序特性进一步优化了数据库索引性能。
  2. 2. COM 组件标识 在 COM 编程中,GUID 用于标识接口和类。
  3. 3. 文件或资源标识 GUID 可用于为文件、资源或会话分配唯一标识符。
  4. 4. 分布式系统 在分布式系统中,GUID 是标识不同节点或对象的理想选择。

5. 为什么选择 Guid V7?

Guid V7 是 .NET 9 引入的新特性,解决了传统 GUID 的一些局限性:

  • 顺序性:基于时间戳的顺序特性,减少了数据库索引的碎片化。
  • 性能优化:在关系型数据库中插入和查询性能更高。
  • 兼容性:仍然是标准的 128 位 GUID,兼容现有系统。

默认创建: 它默认使用当前 UTC 时间

代码语言:javascript
复制
Guid guid7 = Guid.CreateVersion7();
Console.WriteLine("Guid V7: " + guid7);
//Guid V7: 0196321a-07a3-74b6-b7d1-516a9d5dc247

指定时间戳创建:

代码语言:javascript
复制
DateTimeOffset timestamp = DateTimeOffset.UtcNow;
Guid guid7WithTimestamp = Guid.CreateVersion7(timestamp);
Console.WriteLine(guid7WithTimestamp);
//01963219-b06e-7230-a9f6-2eba45fa94ef

6. 总结

GUID 是一种强大的工具,用于生成全局唯一标识符。在 C# 中,System.Guid 类提供了简单易用的接口来生成和格式化 GUID。随着 .NET 9 引入 Guid V7,GUID 的性能和适用性得到了进一步提升。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是 GUID?
    • 从 .NET 9 开始的新特性:Guid V7
  • 2. 如何生成 GUID?
    • 2.1 使用 Guid.NewGuid()
    • 2.2 从字符串转换为 GUID
    • 2.3 从字节数组创建 GUID
  • 3. GUID 的格式化输出
    • 3.1 常见格式化选项
    • 3.2 示例
    • 3.3 全零 GUID
  • 4. GUID 的常见应用场景
  • 5. 为什么选择 Guid V7?
  • 6. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档