包含对Regex.Replace()和/或String.Format()的调用的静态字符串声明是否会在编译时得到优化?

时间:2011-05-20 14:17:23

标签: c# compiler-construction declaration static-members compiler-optimization

根据文章"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脚本中不必要的空格。在运行时不需要空格,但是对于代码的可读性非常有用。

编译器是否足够聪明,可以在编译时优化上述内容?

1 个答案:

答案 0 :(得分:0)

不,这些是运行时函数调用。编译器在编译时很容易连接文字的字符串连接,但RegEx和string.Format更复杂,只是运行时。文字的字符串连接是特例。