C# 将字符串更改为常量

C# 将字符串更改为常量,c#,.net,string,C#,.net,String,有人告诉我将整个应用程序字符串放在常量中,而不是内联 为什么呢 它是否缩短了编译时间?运行时间?还是仅仅是代码标准 示例 而不是写: selectSingleNode.InnerText == "SomeString" 写 我见过一些测试,其中开发人员测试了执行时间和在使用常量和非常量字符串之间生成的IL。的确,使用const会带来一点点性能提升(尽管除非你在美国宇航局或华尔街工作,否则这一点微不足道)。真正的好处是: 您正在确保您的值是不变的 您是在一个位置定义文字,而不是内联编写文字。如果

有人告诉我将整个应用程序字符串放在常量中,而不是内联

为什么呢

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

示例

而不是写:

selectSingleNode.InnerText == "SomeString"


我见过一些测试,其中开发人员测试了执行时间和在使用常量和非常量字符串之间生成的IL。的确,使用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
    

    这是一个非常糟糕的常量名称,对可读性没有任何帮助。问题在于,它只是说明字符串文本的内容,而实际上,它应该传达字符串文本的用途。

    默认情况下,它们不是
    const
    。你的意思是说不可变的?这个问题相当广泛。你说的是字符串文字吗?你的朋友告诉你要避免。只要你要在代码中的多个位置使用相同的字符串文字,你就应该使用常量。一个明显的例子是
    数据库连接字符串
    。记住,过早优化是万恶之源。除非在多个位置使用此字符串,否则不要执行此操作。这样做只是为了可读性,而不是为了性能或其他任何东西。他在比较
    const
    和文本。变量、性能和易变性不是问题。您的回答很有帮助!谢谢我也很着急!
    private const string ASTERISK = "*"; // very poor name