以下代码给出了" FileNameSizeDelimiteC必须是常数"的问题,问题是什么?
public const char FileNameSizeDelimiterC = '|';
public const string FileNameSizeDelimiter = Char.ToString(FileNameSizeDelimiterC);
答案 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。
我假设在这种情况下代码是示例代码,所以你不能只使用"|"
这似乎是一样的东西?