FileNameSizeDelimiteC必须是常量

时间:2017-04-19 09:26:04

标签: c#

以下代码给出了" FileNameSizeDelimiteC必须是常数"的问题,问题是什么?

public const char FileNameSizeDelimiterC = '|'; 
public const string FileNameSizeDelimiter = Char.ToString(FileNameSizeDelimiterC);

2 个答案:

答案 0 :(得分:3)

Char.ToString是一个函数,因此必须在运行时调用才能获取值,这意味着您无法将其存储在const值中。从文档(强调我的):

  

常量表达式是一个可以在编译时完全评估的表达式。因此,引用类型常量的唯一可能值是字符串和空引用。

但你可以readonly

public const char FileNameSizeDelimiterC = '|'; 
public readonly string FileNameSizeDelimiter = Char.ToString(FileNameSizeDelimiterC);

答案 1 :(得分:1)

问题是Char.ToString是一种方法,因此就编译器而言,它不是常量。编译时编译器不会运行任何代码。尽管你或我可能会看到它并说“它将永远是相同的”,但编译器却无法做到。原因是它不知道Char.ToString将始终为同一输入返回相同的输出。它同样可能是依赖于配置变量,时间或任何其他数量的东西。虽然语言开发人员可能已经包含了一种方法来标记方法,编译器可以这样做,但他们没有,所以你的consts真的必须是const。

我假设在这种情况下代码是示例代码,所以你不能只使用"|"这似乎是一样的东西?