根据文章 “如何:连接多个字符串(C# 编程指南)” 字符串文字和字符串常量将在编译时连接成单个字符串。它进一步指出字符串变量只能在运行时连接。
我只有字符串文字和枚举值常量,但我确实有一个稍微复杂的场景,其中它们与两个静态方法调用相结合。为了便于阅读和方便起见,我声明一个包含 SQL 的静态字符串,如下例所示:
private enum StatGroup
{
Test,
...
}
private static string TestSql =
Regex.Replace(
String.Format(
@"INSERT INTO StatCounts (StatGroup, LinkStatus, LinkCount)
SELECT '{0}', LinkStatus, COUNT(*)
FROM LinkInfo
GROUP BY LinkStatus",
StatGroup.Test),
@"\s+", " ", RegexOptions.Multiline),
我使用 String.Format(),这样我就可以利用枚举将有效值插入到
StatGroup
表列中。我使用 Regex 删除 SQL 脚本中不必要的空格。运行时不需要空格,但可以很好地提高代码的可读性。
编译器是否足够聪明,可以在编译时优化上述内容?
不,这些是运行时函数调用。 文字的字符串连接很容易让编译器在编译时连接,但 RegEx 和 string.Format 更复杂,并且只能在运行时使用。 文字的字符串连接是特殊情况。