在编译时生成 Guid

Mos*_*aou 2 c# compiler-construction guid compiler-errors constants

我正在尝试生成一个常量值,我将使用如下:

public class Foo()
{
    public const String ExtensionKey = Guid.NewGuid().ToString();
    public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出错误:

The expression being assigned to 'Foo.ExtensionKey' must be constant

我知道在编译时无法执行方法(构造函数或类型初始值设定项)。我正在寻找一种解决方法来将随机生成的 Guid 分配给ExtensionKey不同类的不同常量。

编辑:

目的是为每种类型生成一个唯一的 Guid。Guid 值对于所有对象实例和应用程序运行时都必须相同。这是行为,Const我正在寻找一种方式来尊重它。

Jep*_*sen 5

(这个答案的大部分是从对问题的评论中“提升”的。)

在 Visual Studio 中,您可以选择“工具”-“创建 GUID”。或者在 Windows PowerShell 中,您可以说[Guid]::NewGuid().ToString(). 那会给你一个Guid. 然后,您可以将该特定 Guid 的字符串表示作为string常量。

public const string ExtensionKey = "2f07b447-f1ba-418b-8065-5571567e63f6";
Run Code Online (Sandbox Code Playgroud)

Guid是固定的,当然。标记的字段const总是static(但您不能提供static关键字;它是隐含的)。

如果要拥有Guidtype字段,则不能const在 C# 中声明。那么你会这样做:

public static readonly Guid ExtensionKey = new Guid("2f07b447-f1ba-418b-8065-5571567e63f6");
Run Code Online (Sandbox Code Playgroud)

readonly意味着该字段只能从(static在这种情况下)同一类的构造函数(派生类的构造函数是不行的)更改。