我正在尝试生成我将使用的常量值,如下所示:
public class Foo()
{
public const String ExtensionKey = Guid.NewGuid().ToString();
public int ID { get; set; }
}
编译器抛出错误:
分配给“Foo.ExtensionKey”的表达式必须是常量
我知道不可能在编译时执行方法(构造函数或类型初始化程序)。我正在寻找一种解决方法,以将随机生成的 Guid 分配给不同类的不同 ExtensionKey
常量。
编辑:
目的是为每种类型生成一个 UNIQUE Guid。所有对象实例的 Guid 值必须相同,并且在应用程序运行时必须相同。这是 Const
的行为,我正在寻找一种方法来尊重它。
最佳答案
(这个答案的大部分是从对问题的评论“提升”而来的。)
在 Visual Studio 中,您可以选择“工具”-“创建 GUID”。或者在 Windows PowerShell 中,您可以说 [Guid]::NewGuid().ToString()
。这将为您提供一个 Guid
。然后,您可以使该特定 Guid 的字符串表示形式成为您的 string
常量。
public const string ExtensionKey = "2f07b447-f1ba-418b-8065-5571567e63f6";
当然,Guid
是固定的。标记为 const
的字段始终是 static
(但您不能提供 static
关键字;它是隐含的)。
如果要有Guid
类型的字段,那么在C#中不能声明为const
。然后你会这样做:
public static readonly Guid ExtensionKey = new Guid("2f07b447-f1ba-418b-8065-5571567e63f6");
readonly
表示该字段只能从同一类的(static
)构造函数更改(派生类的构造函数是不行的) .
关于c# - 在编译时生成一个 Guid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14536254/