Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String concatenation with or without .ToString()?

Tags:

c#

.net

.net-3.5

I have a statement where a string is assigned in the following manner:

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

Are there any performance differences between i.ToString() or just plain i, as both are just converted to the (culture invariant?) string equivalent?

I am well aware of the existence of String.Concat(), String.Format, StringBuilder, etc., but for the sake of this case, lets assume I may only use + concatenation.

Thanks in advance.

like image 971
Webleeuw Avatar asked Dec 29 '09 14:12

Webleeuw


3 Answers

+ concatenation uses String.Concat anyway - String itself doesn't expose a + operator.

So for example:

int i = 10;
string x = "hello" + i;

is compiled into:

int i = 10;
object o1 = "hello";
object o2 = i; // Note boxing
string x = string.Concat(o1, o2);

Whereas calling ToString directly will avoid boxing and call the Concat(string, string) overload. Therefore the version with the ToString call will be slightly more efficient - but I highly doubt that it'll be significant, and I'd strongly urge you to go with whichever version you feel is more readable.

like image 178
Jon Skeet Avatar answered Nov 11 '22 06:11

Jon Skeet


Just using string + object forces a call to ToString() on the object - it's equivalent to calling it explicitly.

like image 23
Aviad P. Avatar answered Nov 11 '22 07:11

Aviad P.


ToString is the default method used to write an object. So, if you use "i" or "i.ToString()" is the same thing.

If you know a little about operator overloading in c++ you can understand how "+" works in this case.

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);    }

}

Result: msg: age is 10. great?

s1: 15: Two plus three is 23

s2: 15: Two plus three is 5

like image 2
Guilherme Ferreira Avatar answered Nov 11 '22 07:11

Guilherme Ferreira