将字符串更改为常量

本文关键字:常量 字符串 | 更新日期: 2023-09-27 18:28:14

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

为什么?

它是否提高了编译时间?运行时间?还是仅仅是代码标准?

示例

而不是写:

selectSingleNode.InnerText == "SomeString"

写入

selectSingleNode.InnerText == SOME_CONST

将字符串更改为常量

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

可维护性

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

可读性

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

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

// 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);

正确选择常数的名称可以使代码的意图更加清晰。但这里的关键是,你必须选择一个好名字。我经常会看到这样的东西:

private const string ASTERISK = "*"; // very poor name

这是一个选择不当的常量名称,对可读性毫无帮助。问题是,它只是简单地声明字符串文字的内容,而应该传达字符串文字的用途。

我见过一些测试,其中开发人员测试了使用常量和非常量字符串之间生成的执行时间和IL。的确,使用const会带来丝毫的性能提升(尽管微不足道,除非你在美国国家航空航天局或华尔街工作),但真正的好处是:

  1. 你正在确保你的价值观是不变的
  2. 您在一个位置定义文字,而不是以内联方式编写文字。如果将来需要更改某个值,应该会更容易

这并不是详尽无遗的,我很想看看其他人也发布了什么。希望这至少能有所帮助。