Wie interpoliere ich Strings?


106

Ich möchte in C # (aus einem Python-Hintergrund) Folgendes tun:

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

Wie ersetze ich das Token innerhalb der Zeichenfolge durch den Wert außerhalb der Zeichenfolge?

Antworten:



270

Dies wurde ab C # 6.0 (Visual Studio 2015+) hinzugefügt.

Beispiel:

var planetName = "Bob";
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"

Dies ist syntaktischer Zucker für:

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);

Zusätzliche Ressourcen:

String-Interpolation für C # (v2) -Diskussion

C # 6.0 Sprachvorschau


Patch für Mono (datiert 2009, Ihr Kilometerstand kann variieren) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave


Diese Funktion ist so eine schöne Sache. Insbesondere mit VS2015 und der Editorunterstützung können Sie die interpolierten Zeichenfolgen klar erkennen und Intellisense erhalten. Es funktioniert sogar mit Methoden! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Patrick

14

Sie können verwenden string.Format, um Werte in Zeichenfolgen abzulegen:

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

Eine Alternative ist die Verwendung des C # -Verkettungsoperators:

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

Wenn Sie viele Verkettungen durchführen, verwenden Sie die StringBuilderKlasse, die effizienter ist:

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();


12

Wenn Sie derzeit Visual Studio 2015 mit C # 6.0 verwenden, versuchen Sie Folgendes:

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

Diese Funktion wird als Zeichenfolgeninterpolation bezeichnet.


6

Dafür gibt es keinen Operator. Sie müssen verwenden string.Format.

string strVar = "stack";
string mystr  = string.Format("This is {0}soverflow", strVar);

Leider string.Formatist eine statische Methode, so dass Sie nicht einfach schreiben können "This is {0}soverflow".Format(strVar). Einige Leute haben eine Erweiterungsmethode definiert, die diese Syntax erlaubt.


5

Verwendung string.Format:

string mystr = string.Format("This is {0}overflow", "stack");


1

Sie haben 2 Möglichkeiten. Sie können entweder String.Format oder den Verkettungsoperator verwenden.

String newString = String.Format("I inserted this string {0} into this one", oldstring);

ODER

String newString = "I inserted this string " + oldstring + " into this one";

Unter der Decke String.Format()verwendet StringBuilder. StringBuilder ist normalerweise effizienter, wenn viele Zeichenfolgen verkettet werden, aber der Verkettungsoperator eignet sich perfekt für einmalige Zeichenfolgen. String.Format()ist nützlich, wenn die Ausgabe formatiert werden muss, z. B. um numerischen Werten Auffüllungen oder führende Nullen hinzuzufügen. Die Verwendung String.Format()in einer Schleife instanziiert möglicherweise viele StringBuilder. In dieser Situation ist es besser, einen einzelnen StringBuilder zu verwenden, der außerhalb der Schleife und AppendFormat()innerhalb der Schleife deklariert ist .
David Clarke

1

Es gibt noch eine Möglichkeit, Platzhalter mit string zu implementieren. Ersetzen, hilft seltsamerweise in bestimmten Situationen:

mystr = mystr.Replace("%soverflow", strVar);

1

Sie können den folgenden Weg verwenden

String-Interpolation

Das Sonderzeichen $ kennzeichnet ein Zeichenfolgenliteral als interpolierte Zeichenfolge. z.B

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

Eine interpolierte Zeichenfolge ist ein Zeichenfolgenliteral, das möglicherweise interpolierte Ausdrücke enthält. Wenn eine interpolierte Zeichenfolge in eine Ergebniszeichenfolge aufgelöst wird, werden Elemente mit interpolierten Ausdrücken durch die Zeichenfolgendarstellungen der Ausdrucksergebnisse ersetzt.

String.Format

Verwenden Sie String.Format, wenn Sie den Wert eines Objekts, einer Variablen oder eines Ausdrucks in einen anderen string.Eg einfügen müssen

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));

0

Verwenden:

strVar = "stack"
mystr  = String.Format("This is {0}", strVar);

0

Sie können dies mit Expansive erreichen: https://github.com/anderly/Expansive


C # verfügt über einen eingebauten Interpolationsmechanismus. Es gibt absolut keinen Grund, eine Bibliothek für diese Funktionalität einzuschließen.
Anzeigename

2
@Displayname schau dir das Datum auf der Frage an. C # hatte nicht immer eine eingebaute String-Interpolation. Es wurde in C # 6 im Jahr 2016 hinzugefügt. Daher der Grund für meine Antwort im Jahr 2014.
anderly
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.