如何在C#中声明一个常量Guid?

sma*_*man 51 c# guid const constants compile-time-constant

是否有可能在C#中声明一个恒定的Guid?

我明白我可以声明一个static readonly Guid,但是有一种语法允许我写const Guid吗?

Qui*_*ith 59

不可以.const修饰符仅适用于"原始"类型(bool,int,float,double,long,decimal,short,byte)和字符串.基本上任何你可以声明为文字的东西.

  • 它实际上是以另一种方式定义的.您可以对任何编译时文字值使用`const`.C#实际上并没有定义术语"原始类型"; 它在技术上只是俚语.其他语言使用实际上定义术语"原始类型"并具有这种类型的固定列表.实际上,`Guid`有一个编译时文字,那就是`default(Guid)`.这是Guid唯一的编译时字面值. (7认同)

Jai*_*ero 41

声明它static readonly Guid而不是const Guid

  • @Raffaeu:这是一个非常有用的帖子(+1来自我),但从技术上讲,它甚至没有回答这个问题("是否有可能在C#中声明一个恒定的Guid?"),也没有对*为什么给出任何解释*答案是肯定或否定.它提供了一种解决方法,但没有解释`static readonly`与`const`的区别,以及使用one而不是其他的含义.因此,它远不是"最佳答案"应该是什么样子. (4认同)

小智 26

public static readonly Guid Users = new Guid("5C60F693-BEF5-E011-A485-80EE7300C695");
Run Code Online (Sandbox Code Playgroud)

就是这样.

  • 如果你需要在编译时评估的东西,它不是一个合适的选择. (7认同)
  • 但是,这是一个合适的选择。 (3认同)

小智 22

虽然您似乎无法做到这一点,但您可以在需要时进行解析:

const string _myGuidStr = "e6b86ea3-6479-48a2-b8d4-54bd6cbbdbc5";
Run Code Online (Sandbox Code Playgroud)

但是不要使用上面的guid,因为它完全属于我,我首先生成它所以我声称对这个特定guid的所有权!但我很天真 - 使用这一个(我不喜欢它如何回复我,但它总是一个很好的指导,当它保持闭嘴):284c694d-d9cc-446b-9701-b391876c8394

  • +1,即使您的GUID也回复了我. (9认同)
  • @ZarShardan他们是独一无二的! (5认同)

Pro*_*ega 5

我是这样做的:

public static class RecordTypeIds
{
    public const string USERS_TYPEID = "5C60F693-BEF5-E011-A485-80EE7300C695";
    public static Guid Users { get { return new Guid(EntityTypeIds.USERS_TYPEID); } }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用只读字段而不是为每次访问创建新Guid的属性,您将获得略微更好的性能 (7认同)
  • 我喜欢你的答案最好的减去get属性.我同意smartcaveman ......只需将它作为公共静态只读Guid. (2认同)