在.NET中使用String.Format的常量

14

我有两个常量:

public const string DateFormatNormal = "MMM dd";
public const string TimeFormatNormal = "yyyy H:mm";

后来,我决定基于这两个值再定义一个常量:

public const string DateTimeFormatNormal = String.Format("{0} {1}", DateFormatNormal, TimeFormatNormal);

但是我遇到了编译错误:被分配给 'Constants.DateTimeFormatNormal' 的表达式必须是常量

尝试像这样做之后:

public const string DateTimeFormatNormal = DateFormatNormal + " " + TimeFormatNormal;

它可以使用+ " " +工作,但我仍然更喜欢使用类似于String.Format("{0} {1}", ....)的方法。你有什么想法如何使它工作?

2个回答

21
很遗憾,不行。在使用 const 关键字时,值需要是编译时常量。String.Format 的结果不是编译时常量,所以永远不会起作用。
你可以将 const 改为 readonly,并在构造函数中设置值。虽然不是完全相同的东西,但效果类似。

3
您可以使用"readonly",并在变量声明时设置变量的值。它不必在类构造函数中设置。 - Jason Down

4
我经常遇到这种情况,最终我会将其转换成类似以下的形式:
public static readonly string DateTimeFormatNormal = String.Format("{0} {1}", DateFormatNormal, TimeFormatNormal);

希望我没理解错,我是VB.NET开发人员,思路相同。

Public Shared ReadOnly DateTimeFormatNormal As String = String.Format("{0} {1}", DateFormatNormal, TimeFormatNormal)

Public Shared ReadOnly非常接近于Public Const


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接