根据文章"How to: Concatenate Multiple Strings (C# Programming Guide)",字符串文字和字符串常量将在编译时串联成一个字符串。它进一步指出字符串变量只能在运行时连接。
我只有字符串文字和枚举值常量,但我确实有一个稍微复杂的场景,它们与两个静态方法调用相结合。为了便于阅读和方便,我按照以下示例声明了一个包含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脚本中不必要的空格。在运行时不需要空格,但是对于代码的可读性非常有用。
编译器是否足够聪明,可以在编译时优化上述内容?
答案 0 :(得分:0)
不,这些是运行时函数调用。编译器在编译时很容易连接文字的字符串连接,但RegEx和string.Format更复杂,只是运行时。文字的字符串连接是特例。