0

我最近发现这个老问题询问 C# 中的 const DateTime:Constant DateTime in C#

我阅读了所有答案,它们都感觉非常复杂和复杂,其中大多数都迫使您将该 const 存储为 String 而不是 DateTime,我认为这可能会导致位置设置的潜在问题。

我对这个问题的解决方案是使用 get-set 子句:

 public DateTime SOME_DATE
 {
      get
      {
           return new DateTime(2020, 03, 04);
      }
      set
      {
           throw new ReadOnlyException();
      }
 }

我很惊讶没有人知道这件事。这似乎是一个更优雅的解决方案。这种方法有问题吗?

4

1 回答 1

2

公共常量与公共只读实例属性不同。对于初学者来说,常量在编译时被它们的值替换——这就是为什么它们必须是文字值——而且 c# 不支持 DateTime 的文字值。

此外,根据定义,常量是静态的 - 因此,如果您想要一个属性,您至少必须将其设为静态属性。

另一件事 - 拥有一个只抛出异常(甚至不是内置异常)的设置器是完全错误的 - 使属性只读而不提供设置器。

话虽这么说,如果我不得不为 DateTime 值“伪造”一个常量,我可能会使用只读静态属性,因为它是你可以获得的最接近常量的东西:

// Please don't use this name
public static DateTime MyAlmostConstantDateTime {get {return new DateTime(2020, 3, 4);}}
于 2020-03-04T12:06:25.593 回答