.NET GUID大写字符串格式

19

我需要将GUID格式化为带破折号的形式,并且全部大写。我知道使用myGuid.ToString("D")或者String.Format("{0:D}", myGuid)可以得到带破折号的格式,但是使用大写的D而不是小写的d并不能让我的GUID变成大写的,就像我原本以为的那样。是否有一种方法可以在不采取任何疯狂行动的情况下实现这一点,还是我只需要调用myGuid.ToString().ToUpper()呢?

4个回答

23

请注意,定义 UUID 规范的RFC 4122规定,在将结构转换为字符串时输出的十六进制字符应为小写:

  The hexadecimal values "a" through "f" are output as
  lower case characters and are case insensitive on input.

这可能解释了为什么 Guid 结构不支持直接输出大写字符串。

由于忽略了 ToString 格式提供程序参数,因此唯一的替代方法(除了简单地将字符串转换为大写)是直接操作字节,同时注意保持端序。直接转换为大写(直接或通过扩展方法)可能更加简单明了。


4
2008年8月的国际规范http://www.itu.int/rec/T-REC-X.667/en与RFC 4122相符:6.5.4生成UUID十六进制表示的软件不应使用大写字母。注意-建议在所有可读格式中仅限使用小写字母作为十六进制表示。但是,处理该表示的软件需要按照6.5.2规定接受大小写字母。 - Basil Bourque
2
我知道这个问题有点老了,但我觉得很有趣的是Visual Studio中的“创建GUID”工具生成大写字母的GUID。此外,WIX工具集建议GUID应该为大写以获得完整的支持。我不记得具体的推荐内容,但我只记得读过这样的说明。 - Kenneth Lauritsen

21

我是不是只需要调用myGuid.ToString().ToUpper()

是的。你可以尝试创建一个自定义的格式化提供程序,但在这里似乎没有必要。


2

我认为你没有其他选择,只能执行myGuid.ToString().ToUpper()。虽然,你可以编写一个扩展方法,比如ToUpperString,但我不认为系统中有任何内置的方法。


1
假设你有一个保存Guid的类,并且你想保留类型化的Guid,你可以这样做:
public Guid Identifier { get; set; }

public String FormattedIdentifier => Identifier.ToString().ToUpper();

我认为它仍然具有一定的价值。我的示例展示了如何封装Guid的格式化。 - FastBiscuit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接