ToString方法并返回静态字符串

apo*_*pse 2 c# string tostring

类示例:

public class SomeType
{
    private int type;

    // some code...

    public override string ToString ()
    {
       if (type == 1) return "One";
       if (type == 2) return "Two";
    }
}
Run Code Online (Sandbox Code Playgroud)

现在想象应用程序ToString()在一秒钟内调用千次方法.

我的问题是:当我在代码中使用内联创建的字符串时,就像something = myClass.ToString()在每个调用中创建一个新的字符串或编译器以某种方式优化它?(因为字符串是不可变的,它只能返回参考静态字符串).

如果没有,我应该创建静态私有字符串字段并ToString出于性能原因返回方法吗?

当然我会用秒表测试它,但无论如何我需要专家的答案.

Jon*_*eet 6

您正在使用字符串文字 - 这意味着您每次都返回对同一字符串的引用.这是由语言规范保证的.从C#5规范的2.4.4.5节:

当根据字符串相等运算符(第7.10.7节)等效的两个或多个字符串文字出现在同一程序中时,这些字符串文字引用相同的字符串实例.

所以作为一个更简单的例子:

string x = "One";
string y = "One";
Console.WriteLine(object.ReferenceEquals(x, y)); // Prints True
Run Code Online (Sandbox Code Playgroud)

在您的代码中,ToString()仍将调用该方法 - 但每次都不会创建新的字符串对象.顺便说一下,您可以考虑使用switch语句而不是所有这些if语句.

需要注意的是,即使没有新建一个字符串每次,创造数千个每秒串不会让一个现代CPU闯进了一身汗.分配器和垃圾收集器都非常高效,现代计算机可以在一秒钟内完成大量工作.