Создает ли ToString () новую строку при использовании в строках? - PullRequest
9 голосов
/ 26 сентября 2010

Создает ли "hello".ToString() новую строку или она достаточно умна, чтобы возвращать ссылку на тот же объект?

Ответы [ 3 ]

11 голосов
/ 26 сентября 2010

Ответить на ваш вопрос в заголовке: нет.

Согласно .NET Reflector, при вызове .ToString() или .ToString(IFormatProvider) на string он просто возвращает себя.

2 голосов
/ 26 сентября 2010

Вы можете проверить эту гипотезу с помощью простого утверждения:

using System.Diagnostics;

void ToStringHypothesis()
{
    string myString = "Hello!";
    string otherString = myString.ToString();

    Debug.Assert(Object.ReferenceEquals(myString, otherString));
}

Поскольку строки являются неизменяемыми в .NET, разумная реализация String.ToString() должна возвращать ссылку на себя.

0 голосов
/ 26 сентября 2010

Это достаточно умно (по крайней мере в моно ):

public override String ToString ()
{
return this;
}
...