为什么我不能将常量字符串的串联分配给常量字符串?

C. *_*oss 5 c# string const

有时我想分解一个常量字符串,原因是格式化,通常是SQL.

const string SELECT_SQL = "SELECT Field1, Field2, Field3 FROM TABLE1 WHERE Field4 = ?";
Run Code Online (Sandbox Code Playgroud)

const string SELECT_SQL = "SELECT Field1, Field2, Field3 " 
                        + "FROM TABLE1 " 
                        + "WHERE Field4 = ?";
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 23

嗯,那应该没事......你确定它不会编译吗?

示例代码:

using System;

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

    static void Main()
    {
        Console.WriteLine(MyConstant);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的猜测是,在你的真实代码中,你在连接中包含了一些非常量表达式.

例如,这很好:

const string MyField = "Field";
const string Sql = "SELECT " + MyField + " FROM TABLE";
Run Code Online (Sandbox Code Playgroud)

但这不是:

static readonly string MyField = "Field";
const string Sql = "SELECT " + MyField + " FROM TABLE";
Run Code Online (Sandbox Code Playgroud)

这试图使用非恒定表达(MyField常量表达式声明内) -而这不是允许的.