Laden...

Welche Schreibweise bevorzugen: ' "" + n' oder 'n.ToString()' ?

Erstellt von aime2code vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.376 Views
A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 6 Jahren
Welche Schreibweise bevorzugen: ' "" + n' oder 'n.ToString()' ?

Hallo zusammen,

welchen Code würdet ihr bevorzugen?

string str = anyClass.Counter.ToString(); // 1
string str = "" + anyClass.Counter; // 2

Counter ist eine numerische Variable.

Danke & Gruß!

PS: Für mich sieht das erste logischer aus.
Beim zweiten hätte ich noch Bedenken, dass ein unnötiges Objekt erzeugt wird - oder optimiert der Compiler das weg?

3.170 Beiträge seit 2006
vor 6 Jahren

Hallo,

ich würde definitiv Variante 1 bevorzugen, ich finde das besser lesbar.

Was der Compiler draus baut, ab ich mir nicht angeschaut - kann gut sein dass er genau das Gleiche aus beiden Varianten baut. Auch beim Jitter könnte das noch passieren.

Einen numerischen Wert zu einem Leerstring zu "addieren" fühlt sich für mich einfach falsch an.
Mal davon abgesehen, dass in der zweiten Variante ohnehin auch ToString auf dem Counter aufgerufen wird.

Gruß, MarsStein

Edit:
In neueren C#-Versionen kannst Du aich String interpolation nutzen, das ist auch eine schöne und gut lesbare Variante:

string str = $"{anyClass.Counter}"; // entspricht String.Format("{0}", anyClass.Counter);

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

16.807 Beiträge seit 2008
vor 6 Jahren

der Compiler macht string.concat(object, object) draus.
string str = "" + anyClass.Counter; // 2

wird zu


int c = anyClass.Counter;

object a = "";
object b = c;
string x = string.concat(a, b)

Im Falle descerfolgt noch ein boxing. IIRC wird damit object.ToString() ausgeführt.

Die sauberere Variante ist auf alle Fälle ToString(), da diese Methode im Hintergrund sowieso immer durch das concat ausgeführt wird.

78 Beiträge seit 2016
vor 6 Jahren

Scheinbar macht der Compiler aus


string str = "" + Program.Counter;

sogar nur ...


string str = string.Concat(Program.Counter);

bzw der IL-Code:


call string [mscorlib]System.String::Concat(object)

Das macht das aber auch nicht viel besser.

Mit ...


string str = anyClass.Counter.ToString(); 

... bist du ganz gut aufgehoben 👍

http://dotnet-paderborn.azurewebsites.net/

849 Beiträge seit 2006
vor 6 Jahren

Wobei hier noch ein Unterschied besteht, wenn Counter ein nullable ist.

Das ToString würde hier mit einer NullReference fliegen, das Concat nicht.

Wobei es glaube ich Definitionssache ist, ob man die Variable dann noch als numerisch bezeichnen kann 😉

-> Das nur der vollständigkeit halber.

W
955 Beiträge seit 2010
vor 6 Jahren

Das ToString würde hier mit einer NullReference fliegen, das Concat nicht Führe bitte den nachfolgenden Code in einem Projekt aus und korrigiere dann deinen Beitrag.


            try {

                int? counter = null;
                Console.WriteLine(counter.ToString());
            }
            catch (Exception x) {

                Console.WriteLine(x.ToString());
            }

            Console.ReadKey();

A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 6 Jahren

Genau, die Exception fliegt nur bei Verweistypen, die null sind.
Nullable Types sind ja Structs, also ein Werttyp.
(nur die Syntax und IntelliSense können in diesem Fall verwirrend sein)