当前位置:首页 > AI技术 > 正文内容

C#怎么生成全球唯一标识 C#如何创建GUID字符串基础最佳实践|Duuu笔记

admin6个月前 (04-01)AI技术150

绝大多数场景下应直接使用 Guid.NewGuid() 生成 GUID,它调用系统安全随机数生成器确保唯一性;需字符串时用 ToString() 或 ToString("N"),避免手动拼接、哈希码作 ID 或误判 Guid.Empty。

Guid.NewGuid()

生成新 GUID 最稳妥

绝大多数场景下,直接调用

guid.newguid()

就是正确答案。它由 .net 运行时调用系统底层随机数生成器(windows 上是

cryptgenrandom

或 bcrypt,linux/macos 是

/dev/urandom

),保证统计学意义上的唯一性,且不依赖网络、时间戳或硬件 id。

常见错误是手动拼接时间戳 + 进程号 + 随机数——这既不安全也不必要,还容易因时钟回拨或并发导致重复。

Guid.NewGuid()

返回的是

Guid

类型,不是字符串;需要转成字符串再用,比如

guid.ToString()

默认

ToString()

输出带短横线的 32 位十六进制格式(如

"a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8"

如果只要纯数字字母(无短横线),用

guid.ToString("N")

;要大写就加

.ToUpper()

什么时候不能用

Guid.NewGuid()

极少数情况:你需要可预测、可重现的 GUID(比如测试中固定值),或者必须基于某个输入(如字符串、字节数组)生成确定性 GUID。

这时不能硬套

NewGuid()

,得用

Guid.Parse()

Guid.TryParse()

解析已有字符串,或用

Guid.CreateFromBytes()

(.NET 7+)构造。

从字符串解析失败会抛

FormatException

,务必用

Guid.TryParse()

做前置校验

Guid.CreateFromBytes()

输入必须是 16 字节;用

Encoding.UTF8.GetBytes()

转字符串会超长,得先哈希(如

SHA256.HashData()

)再截取前 16 字节

别用

Guid.NewGuid().ToString().GetHashCode()

当 ID——哈希码不是全局唯一,不同 GUID 可能哈希冲突

Guid.Empty

不是“空字符串”,而是全零 GUID

新手常误以为

Guid.Empty

表示“未初始化”或“可忽略”,其实它是合法的 GUID 值:

"00000000-0000-0000-0000-000000000000"

。数据库里存它、API 传它,都算有效值,只是业务上通常约定它代表“未设置”。

独响

一个轻笔记+角色扮演的app

下载

判断是否为默认值,用

guid == Guid.Empty

,不要用

guid.ToString() == ""

(会报错)或

string.IsNullOrEmpty(guid.ToString())

(永远 false)

Entity Framework 中若字段允许 null,建议用

Guid?

(可空类型),比用

Guid.Empty

更语义清晰

JSON 序列化时,默认把

Guid.Empty

输出为

"00000000-0000-0000-0000-000000000000"

,前端可能误判为有效 ID

性能和序列化要注意的小细节

GUID 字符串长度固定(36 字符含短横线),但生成和格式化有开销。高频创建(比如每秒万级)时,

Guid.NewGuid()

本身很快,但

ToString()

是主要瓶颈。

避免在循环里反复调用

guid.ToString("D")

(D 是默认格式);如果格式固定,提前缓存格式化结果或用

Span

手动拼接(.NET 6+)

数据库索引对 GUID 不友好——无序插入导致页分裂;若主键用 GUID,考虑用

NEWSEQUENTIALID()

(SQL Server)或

uuid_generate_v1mc()

(PostgreSQL)替代

gRPC 或高性能 API 中,传输二进制

Guid.ToByteArray()

比字符串省 75% 字节,但需两端协议一致

真正麻烦的不是怎么生成,而是后续怎么用:存进数据库时要不要索引、传给前端要不要脱敏、日志里要不要截断显示……这些地方一不留神,

Guid

就从“唯一标识”变成“排查黑洞”。

相关文章

【深度学习】Java DL4J 2024年度技术总结

一、Java DL4J深度学习概述 1.1 DL4J框架简介 1.2 与其他深度学习框架的比较 1.3 DL4J 的优势 1.3.1 与 Java 生态系统的无...

LLM介绍

。LLM 被证明在使用指令形式化描述的未见过的任务上表现良好。这意味着 LLM 能够根据任务指令执行任务,而无需事先见过具体示例,展示了其强大的泛化能力。 :小型语言模型通常难以解决涉...

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

从入门到精通:前端开发之骡子快跑支持热点借势吗 骡子快跑节日营销文案生成|Duuu笔记

骡子快跑平台提供五步节日营销文案生成路径:一、调用内置32个节日模板库;二、输入热点事件触发动态生成;三、绑定自有素材库实现个性化延展;四、多角色视角协同输出;五、接入微信生态直发并校验合规性。 ☞...

AI高级应用:Perplexity 怎么写用户手册 Perplexity 产品帮助文档生成【技术】实战案例|Duuu笔记

Perplexity AI用户手册需基于API元数据、真实UI截图、典型场景示例、响应字段解析及动态调试指令五步构建:一调用API获取参数与错误码;二标注网页端搜索框、引用图标等组件;三设计信息检索、...

深入理解前端开发:Minimax视频生成黑科技:复杂动作模拟完全指南|Duuu笔记

为精准模拟复杂动作,需采用分帧提示词构建、骨骼关键点引导注入和多阶段动作蒸馏三法:一、将动作拆解为带空间姿态的关键帧序列并加物理约束;二、注入2D/3D关键点坐标锚定关节位置;三、通过粗生成→特征提取...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。