【问题标题】:The expression being assigned to '....' must be constant [duplicate]分配给'....'的表达式必须是常量[重复]
【发布时间】:2013-10-07 10:33:04
【问题描述】:

这段代码有什么问题? 我收到此错误:“分配给 '....' 的表达式必须是常量”

public const string ConnectionString = System.IO.File.ReadAllText(@"D:\connection.ini");

【问题讨论】:

  • 你读过const上的documentation吗?
  • 必须在编译时知道“const”值。在您的示例中,您要求编译器离开并执行一段随机代码 - 它不会这样做。
  • 您的File.ReadAllText 部分在运行时评估,const 用于指定编译时表达式。您可以改用readonly
  • 使用readonly 代替const 并设为静态public static readonly string ConnectionString = System.IO.File.ReadAllText(@"D:\connection.ini");,注意现在它只是一个只能在构造函数中更改的字段。
  • 不确定这是不是重复的。这个问题涉及有错误的字段,而链接的问题是指局部变量。相同的错误消息,但不同的原因和原因。

标签: c# file constants


【解决方案1】:

一个常量值必须在编译时就知道,用readonly代替,效果差不多

【讨论】:

  • 更相似的是static readonly
  • @Silvermind 你是对的,但static readonly 确实意味着如果在执行静态构造函数时文件不存在,则没有理智的方法可以从错误中恢复,所以我不认为这将是对readonly 实例字段的改进。
  • @hvd,我同意,但我不想在我创建的每个实例中都加载这样的文件。顺便说一句,如果它可能是一个常数,也会出现同样的问题。
  • 我可以为你们接受的我的房地产评论多投一票吗? :-)
  • @StevenWood 使用 readonly 代替,它会有类似的效果同意你。但它不适用于 switch case 语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
相关资源
最近更新 更多