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

问题描述 投票:0回答:1

根据文章 “如何:连接多个字符串(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 脚本中不必要的空格。运行时不需要空格,但可以很好地提高代码的可读性。

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

c# declaration compiler-optimization static-members
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.