【问题标题】:Why can I not assign the concatenation of constant strings to a constant string?为什么我不能将常量字符串的串联分配给常量字符串?
【发布时间】:2011-07-02 19:46:45
【问题描述】:

出于格式化原因,我有时想拆分一个常量字符串,通常是 SQL。

const string SELECT_SQL = "SELECT Field1, Field2, Field3 FROM TABLE1 WHERE Field4 = ?";

const string SELECT_SQL = "SELECT Field1, Field2, Field3 " 
                        + "FROM TABLE1 " 
                        + "WHERE Field4 = ?";

但是,C# 编译器不允许第二种形式为常量字符串。为什么?

【问题讨论】:

  • 在示例中,我只显示字符串文字,但在某些情况下,我会包含仅在一个地方定义的其他常量字符串(例如字段名称)。
  • 我的猜测是那些不是实际的字符串常量...
  • 我刚刚在 .net 3.5 中运行了第二个示例,它运行良好。
  • 我建议你发布编译的示例,而不是那些可以编译的示例......

标签: c# string constants


【解决方案1】:

嗯,那应该没问题...你确定它不能编译吗?

示例代码:

using System;

class Test
{
    const string MyConstant = "Foo" + "Bar" + "Baz";

    static void Main()
    {
        Console.WriteLine(MyConstant);
    }
}

我的猜测是,在您的 real 代码中,您在连接中包含了一些非常量表达式。

例如,这很好:

const string MyField = "Field";
const string Sql = "SELECT " + MyField + " FROM TABLE";

但这不是:

static readonly string MyField = "Field";
const string Sql = "SELECT " + MyField + " FROM TABLE";

这是试图在常量表达式声明中使用非常量表达式 (MyField) - 这是不允许允许的。

【讨论】:

  • 我打算这样做@Adam Rackis - 为我节省了一些投票点!
  • 我又试了一次,效果很好。我不知道我之前做错了什么,但我所有的字段都是const ...
  • @Jon Skeet:这是试图在常量表达式声明中使用非常量表达式 (MyField) - 这是不允许的。为什么不允许?
  • @Sandeep:这是不允许的,因为必须在编译时计算常量表达式,这意味着您不能使用仅在执行时可用的值。
  • @Jon Skeet:我错过了“计算的编译时间”。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2015-09-17
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2020-10-15
相关资源
最近更新 更多