c# - 在编译时生成一个 Guid

标签 c# compiler-construction compiler-errors constants guid

我正在尝试生成我将使用的常量值,如下所示:

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/

相关文章:

c++ - boost::date_time, g++-4.7.0, 编译错误

c# - 在 C# 中将整数转换为 Ascii 字符串

c# 多对多关系代码首先没有流畅的 API

C# 折叠数组列表

c++ - 我的 makefile 有什么问题?

iphone - Xcode:基于架构的条件build设置(设备(ARM)与模拟器(i386))

c# - 如何使用 GTK 使 Mono/C# 应用程序保留屏幕空间?

c# - 当我对引用类型和值类型执行转换时到底发生了什么

c++ - 我怎样才能克服 "unsafe"错误?

java - 将JSoup编译为Maven依赖关系的麻烦-Java