为何无法将C#字符串经ToLower()转换后赋值给常量变量?
问题原因及解决方法
你的代码里lowerLetters的赋值语句upperLetters.ToLower()不符合C#中const常量的定义要求:
private const string upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private const string lowerLetters = upperLetters.ToLower(); // 报错行
核心原因
C#的const要求赋值表达式必须是编译期可确定结果的常量表达式,这类表达式只能由以下元素构成:
- 直接字面量(如
"ABC...") - 已定义的其他
const常量 - 针对值类型的基础运算(算术、逻辑、位运算)
- 字符串直接拼接(如
const string ab = "A" + "B")
而string.ToLower()是实例方法调用,它的执行逻辑在运行期,编译器不会在编译阶段执行这个方法并将结果作为常量值固化,哪怕结果看起来是固定的也不行。所以哪怕upperLetters是const,调用它的实例方法得到的结果也不能用来初始化另一个const。
可行解决方案
- 直接使用字面量:
private const string upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private const string lowerLetters = "abcdefghijklmnopqrstuvwxyz";
- 改用
readonly字段:readonly允许在运行期初始化,且只能被赋值一次,适合这种需要基于已有常量做简单转换的场景:
private const string upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static readonly string lowerLetters = upperLetters.ToLower();
内容的提问来源于stack exchange,提问作者Kevin Krüger
相关产品推荐
相关产品推荐

