我需要将GUID格式化为带破折号的形式,并且全部大写。我知道使用myGuid.ToString("D")
或者String.Format("{0:D}", myGuid)
可以得到带破折号的格式,但是使用大写的D
而不是小写的d
并不能让我的GUID变成大写的,就像我原本以为的那样。是否有一种方法可以在不采取任何疯狂行动的情况下实现这一点,还是我只需要调用myGuid.ToString().ToUpper()
呢?
我需要将GUID格式化为带破折号的形式,并且全部大写。我知道使用myGuid.ToString("D")
或者String.Format("{0:D}", myGuid)
可以得到带破折号的格式,但是使用大写的D
而不是小写的d
并不能让我的GUID变成大写的,就像我原本以为的那样。是否有一种方法可以在不采取任何疯狂行动的情况下实现这一点,还是我只需要调用myGuid.ToString().ToUpper()
呢?
请注意,定义 UUID 规范的RFC 4122规定,在将结构转换为字符串时输出的十六进制字符应为小写:
The hexadecimal values "a" through "f" are output as
lower case characters and are case insensitive on input.
这可能解释了为什么 Guid 结构不支持直接输出大写字符串。
由于忽略了 ToString 格式提供程序参数,因此唯一的替代方法(除了简单地将字符串转换为大写)是直接操作字节,同时注意保持端序。直接转换为大写(直接或通过扩展方法)可能更加简单明了。
我是不是只需要调用
myGuid.ToString().ToUpper()
?
是的。你可以尝试创建一个自定义的格式化提供程序,但在这里似乎没有必要。
我认为你没有其他选择,只能执行myGuid.ToString().ToUpper()
。虽然,你可以编写一个扩展方法,比如ToUpperString
,但我不认为系统中有任何内置的方法。
public Guid Identifier { get; set; }
public String FormattedIdentifier => Identifier.ToString().ToUpper();
6.5.4生成UUID十六进制表示的软件不应使用大写字母。注意-建议在所有可读格式中仅限使用小写字母作为十六进制表示。但是,处理该表示的软件需要按照6.5.2规定接受大小写字母。
- Basil Bourque