2009-11-05 13 views
6

Gibt es ein bisschen syntaktischen Zucker für die Vorsilbe Daten am Anfang eines Strings ähnlich wie + = an einen String anfügt?Äquivalent von + = für Präfix

+2

Kann man nicht einfach + = mit den umgekehrten Argumenten aufrufen? Ich bin nicht mit C# vertraut, aber das würde in Java funktionieren. – I82Much

+1

, die post die erste Zeichenfolge an die zweite, nicht die zweite Zeichenfolge in der ersten Zeile voranstellen. Das Ergebnis wäre die gleiche Zeichenfolge, aber in der falschen Variablen –

+0

@ l82Much: Sicher müssten Sie etwas tun wie: s = "Prepend" + = s; – Lazarus

Antwort

20

Verwenden Sie einfach:

x = "prefix" + x; 

Es gibt keine Verbindung Zuweisungsoperator, der dies tut.

+0

Danke Jon (Tony). Ich habe Ihre Kommentare unten auch berücksichtigt. –

17
sorry = "nope, " + sorry; 
0

Dies sind Verfahren aus dem FCL, die verwendet werden können Strings zu verschmelzen ohne Verkettungsoperator zu verwenden. Die + und + = Operatoren neigen dazu, viel Speicher zu verwenden, wenn sie wiederholt aufgerufen werden (d. H. Eine Schleife), aufgrund der Art der erzeugten Strings und Temp-Strings. (Edit: Wie in Kommentaren darauf hingewiesen, String.Format ist oft keine effiziente Lösung entweder)

Es ist eher eine syntaktische Alternative als Zucker.

string full = String.Format("{0}{1}{2}", "prefix", "main string", "last string"); 

^Weitere Informationen unter String.Format at MSDN.

Edit: Gerade für zwei Strings:

string result = string.Concat("prefix", "last part"); 

^Weitere Informationen über String.Concat.

+0

Die mehrfache Verwendung von String.Format wäre genauso problematisch. Die Verwendung von String.Concat ist effizienter als die Verwendung von String.Format, um nur Strings zu verketten. Verkettung in einer Schleife ist wahrscheinlich besser mit einem StringBuilder, nicht String.Format. –

+1

Mit String.Format ist dieser Weg sehr ineffizient. Die CPU-Nutzung ist viel schlechter und es verschwendet immer noch RAM. Sie möchten stattdessen String.Concat: String full = String.Concat ("Präfix", "Hauptstring", "letzter String"). Sie können String.Concat auch an eine Zeichenkette [] übergeben, die Sie in einer Schleife erstellt haben (zB können Sie eine Liste erstellen , dann ToArray() it). Dies führt zu der geringsten Speicherbelegung von allen, da nur der Speicherplatz zugewiesen wird, der zum Speichern der resultierenden Zeichenfolge erforderlich ist. Sowohl "+" als auch String.Format weisen durchschnittlich 30% mehr RAM zu als benötigt. Dies ist nur wichtig bei großen Strings. –

+0

Danke Jungs. Sehr hilfreich. –

7

Man konnte immer eine Erweiterungsmethode schreiben:

public static class StringExtensions{ 

    public static string Prefix(this string str, string prefix){ 
     return prefix + str; 
    } 

} 

var newString = "Bean".Prefix("Mr. "); 

Es ist nicht syntaktischer Zucker, aber einfach trotzdem. Es ist zwar nicht einfacher als das, was bereits vorgeschlagen wurde.

7

Es gibt keinen = + Operator in C#, aber zum Glück OO kommt hier zur Rettung:

string value = "Jamie"; 
value = value.Insert(0, "Hi "); 

Für weitere Informationen über String.Insert: http://msdn.microsoft.com/en-us/library/system.string.insert.aspx

Ich würde zustimmen, dass a = b + a scheint die vernünftigste Antwort hier zu sein. Es liest viel besser als mit string.Insert, das ist sicher.

+0

Prost Nick. Ich entschied mich am Ende mit der Methode String.Concat zu gehen. –