У меня есть оператор, где строка присвоена следующим образом:
for (int i = 0; i < x; i++)
{
Foo.MyStringProperty = "Bar_" + i.ToString();
/* ... */
}
Есть ли любые различия в производительности между i.ToString()
или просто i
, поскольку оба просто преобразовываются в (инвариант культуры?) эквивалентная строка?
Я хорошо знаю о существовании String.Concat()
, String.Format
, StringBuilder
, и т.д., но ради этого случая, позволяет, предполагают, что я могу только использовать +
конкатенация.
Заранее спасибо.
+
concatenation использует String. Конкат
] в любом случае - Строка
сама по себе не выставляет оператора +.
Так например:
int i = 10;
string x = "hello" + i;
скомпилирована в:
int i = 10;
object o1 = "hello";
object o2 = i; // Note boxing
string x = string.Concat(o1, o2);
В то время как прямой вызов ToString
позволит избежать боксинга и вызовет перегрузку Конкат(строка, строка)
. Поэтому версия с вызовом ToString
будет несколько эффективнее - но я сильно сомневаюсь, что она будет значимой, и настоятельно рекомендую вам перейти на ту версию, которая, по вашему мнению, более читабельная.
ToString - метод по умолчанию, используемый для записи объекта. Таким образом, если вы используете "i" или "i.ToString()" - это одно и то же.
Если вы немного знаете о перегрузке оператора в c++, то вы можете понять, как в этом случае работает "+".
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
public class MainClass
{
public static void Main()
{
int number = 10;
string msg = "age is " + number + ".";
msg += " great?";
Console.WriteLine("msg: {0}", msg);
String s1 = 10 + 5 + ": Two plus three is " + 2 + 3;
String s2 = 10 + 5 + ": Two plus three is " + (2 + 3);
Console.WriteLine("s1: {0}", s1);
Console.WriteLine("s2: {0}", s2); }
}
Результат:. msg: возраст - 10. здорово?
s1: 15: два плюс три - 23
s2: 15: два плюс три - 5
Просто использование string + object
заставляет вызвать ToString() на объекте - это эквивалентно явному вызову.
Я бы использовал .ToString() по привычке и удобочитаемости, я уверен, что вы найдете лучшую экономию производительности в другом месте.