为什么不允许在.net中创建日期时间常量?

Rom*_*ain 22 .net c#

我想在.net中创建一个日期时间常量但是收到错误消息

const DateTime dt = Convert.ToDateTime("02/02/2014");
Run Code Online (Sandbox Code Playgroud)

'System.DateTime'不能声明为const.

Jon*_*eet 27

即使你可以声明一个DateTimeconst(你不能像其他答案所指出的那样),你必须使用编译时常量作为值 - 而且DateTime.Now肯定不是编译时常量.

这是有效的:

static readonly DateTime dt = DateTime.Now();
Run Code Online (Sandbox Code Playgroud)

请注意,这将是"无论何时类型的类型初始化程序运行".这很少是一个特别有用的值,除非你确保它在启动时初始化,假设你正在尝试测量...

  • 能够使用 readonly 作为 const 的替代品的好处。 (2认同)
  • 值得注意的是,`VB.NET``Const`在编译时也将被转换为`static readonly`.所以这只是一个伪常量:`今天的Const As DateTime =#2/25/2013#` (2认同)

Mat*_*son 18

DateTime不是C#语言中的本机类型 - 它是.Net库中的结构.

在C#中,您只能从本机语言类型创建consts,并且只能使用可在编译时计算的值初始化它们.DateTime.Now无法在编译时计算.

(可以与const一起使用的唯一引用类型是字符串,这是因为字符串是专门处理的.)

请参阅http://msdn.microsoft.com/en-gb/library/e6w8fe1b%28v=vs.71%29.aspx