将字符串更改为const

时间:2015-12-27 15:18:48

标签: c# .net string

有人告诉我将整个应用程序字符串放在const而不是内联。

为什么?

是否会缩短编译时间?运行?或者只是代码标准?

示例

而不是写作:

selectSingleNode.InnerText == "SomeString"

selectSingleNode.InnerText == SOME_CONST

2 个答案:

答案 0 :(得分:3)

纯粹为了可维护性和可读性而这样做。使用命名常量而不是字符串文字将不会对性能产生任何影响。

<强>可维护性

如果代码中有多个位置需要相同的字符串文字,让它们全部使用相同的命名常量会使代码更易于维护。如果您决定需要更改字符串文字的值,则只需要一个地方进行更改。

<强>可读性

即使您的字符串文字在一个地方使用,提供命名常量也可能使您的代码更具可读性。

例如,在下面的示例中,您认为哪个版本更清楚地传达了意图?

void reverse_print(Node* n)
{
    if (n != NULL)
    {
        reverse_print(n->next);
        std::cout << n->value << ' ';
    }
}

void reverse_print(List* s)
{
    reverse_print(s->first);
}

一个正确选择的常量名称可以使代码的意图更清晰。但关键在于你必须选择一个好名字。很多时候,我会看到类似的东西:

// string literals
int startIdx = someString.IndexOf("[");
int endIdx = someString.IndexOf("]");

// vs. named constants
int startIdx = someString.IndexOf(TAG_START);
int endIdx = someString.IndexOf(TAG_END);

这是一个选择得非常糟糕的常量名称,它不会对可读性有所帮助。问题是它只是简单地说明了字符串文字的内容,相反,它应该传达字符串文字的用途。

答案 1 :(得分:0)

我已经看过一些测试,其中开发人员测试了执行时间和使用const和非const字符串之间生成的IL。确实,使用const可以获得最轻微的性能提升(虽然除非你为美国宇航局或华尔街工作,但是微不足道)真正的好处是:

  1. 您确保您的价值观不可变。
  2. 您在一个位置定义文字而不是内联编写。如果您将来需要更改值,那么应该更容易。
  3. 这并不详尽,我也很想知道其他人发布的内容。希望这至少有帮助。