C# ToString方法并返回静态字符串

C# ToString方法并返回静态字符串,c#,string,tostring,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"; } } 现在想象一下,应用程序在一秒钟内调用了数千次ToString()方法 我的问题是:当我在像somet

课堂示例:

public class SomeType
{
    private int type;

    // some code...

    public override string ToString ()
    {
       if (type == 1) return "One";
       if (type == 2) return "Two";
    }
}
现在想象一下,应用程序在一秒钟内调用了数千次
ToString()
方法

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

如果不是,出于性能原因,我应该创建静态私有字符串字段并在
ToString
方法中返回它们吗


当然,我会用秒表测试它,但我需要一个专家的答案。

您使用的是字符串文字-这意味着您每次都返回对同一字符串的引用。语言规范保证了这一点。根据C#5规范第2.4.4.5节:

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

作为一个简单的例子:

string x = "One";
string y = "One";
Console.WriteLine(object.ReferenceEquals(x, y)); // Prints True
在代码中,仍将调用
ToString()
方法,但它不会每次都创建新的字符串对象。顺便说一下,您可以考虑使用<代码>开关>代码>语句,而不是所有的<代码>,如果语句,


请注意,即使它每次都创建一个新字符串,每秒创建数千个字符串也不会让现代CPU出汗。分配器和垃圾收集器都非常有效,现代计算机可以在一秒钟内完成大量工作。

我不明白你在说什么。你能详细解释一下吗?@JABFreeware:我已经添加了一些细节。如果你还不清楚,请确切解释清楚什么是不清楚的。所以这是我想的。谢谢你的快速回答,斯基特先生。