默认Guid格式

时间:2014-03-03 19:50:25

标签: c# .net .net-4.5

请考虑以下代码。

var guid = Guid.NewGuid();
var a = guid.ToString();
var b = guid.ToString("N");

a的值看起来像7c9e6679-7425-40de-944b-e07fc1f90ae7 b的值类似于7c9e6679742540de944be07fc1f90ae7

默认情况下,有没有办法告诉.NET我想要第二种格式,格式字符串为N

其他类型ToString的默认行为(例如DateTime)与当前文化相关联。 Guid的默认行为是否可能以类似的方式与文化联系在一起? (我很怀疑。)

出于兼容性原因,我需要在没有破折号的情况下使用GUID字符串表示作为整个代码库的标准,但是在没有任何警告的情况下很容易忘记N参数。

2 个答案:

答案 0 :(得分:4)

没有。 documentation on this很清楚:

  

以注册表格式返回此实例的值的字符串表示形式。

  

返回值
  输入:System.String
  此Guid的值,使用“D”格式说明符格式化如下:
  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

某些其他对象的

ToString()会查询语言环境格式化程序,但遗憾的是不是Guid

您可以为Guid定义extension method,然后使用它:

public static class GuidExtensions
{
    public static string ToMyString(this Guid guid)
    {
        return guid.ToString("N");
    }
}

// elsewhere
Guid guid = /* ... */;
Console.WriteLine(guid.ToMyString());

但我想忘记称这会像忘记"N"一样简单,所以这可能不会有太大的改善。 (无论如何你都去了这条路线,请考虑扩展方法比ToMyString()更好的名称: - ))

答案 1 :(得分:1)

  

有没有办法告诉.NET我想要第二种形式,默认格式为字符串N?

不,这是Guid.ToString()的默认行为。

  

此Guid的值,使用" D"格式化。格式说明符如下:   xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   其中GUID的值表示为一系列小写的十六进制数字,分别为8,4,4,4和12位数字,并用连字符分隔。返回值的一个例子是" 382c74c3-721d-4f34-80e5-57657b6cbc27"。要将十六进制数字从a到f转换为大写,请在返回的字符串上调用String.ToUpper方法。

可以添加自定义FxCop规则(或自定义其他一些静态分析工具)以检测 Guid.ToString()的使用情况,但您无法<\ n em>阻止。