You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法将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。

可行解决方案

  1. 直接使用字面量:
private const string upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private const string lowerLetters = "abcdefghijklmnopqrstuvwxyz";
  1. 改用readonly字段:
    readonly允许在运行期初始化,且只能被赋值一次,适合这种需要基于已有常量做简单转换的场景:
private const string upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static readonly string lowerLetters = upperLetters.ToLower();

内容的提问来源于stack exchange,提问作者Kevin Krüger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:12:34