Конкатенация строк с или без.ToString ()?

У меня есть оператор, где строка присвоена следующим образом:

for (int i = 0; i < x; i++) 
{
    Foo.MyStringProperty = "Bar_" + i.ToString();
    /* ... */
}

Есть ли любые различия в производительности между i.ToString() или просто i, поскольку оба просто преобразовываются в (инвариант культуры?) эквивалентная строка?

Я хорошо знаю о существовании String.Concat(), String.Format, StringBuilder, и т.д., но ради этого случая, позволяет, предполагают, что я могу только использовать + конкатенация.

Заранее спасибо.

7
задан Carsten 11 March 2013 в 13:19
поделиться

4 ответа

+ 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 будет несколько эффективнее - но я сильно сомневаюсь, что она будет значимой, и настоятельно рекомендую вам перейти на ту версию, которая, по вашему мнению, более читабельная.

.
24
ответ дан 6 December 2019 в 05:48
поделиться

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

2
ответ дан 6 December 2019 в 05:48
поделиться

Просто использование string + object заставляет вызвать ToString() на объекте - это эквивалентно явному вызову.

.
6
ответ дан 6 December 2019 в 05:48
поделиться

Я бы использовал .ToString() по привычке и удобочитаемости, я уверен, что вы найдете лучшую экономию производительности в другом месте.

0
ответ дан 6 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: