Ich wollte wörtlich Zeichenfolge verwenden , aber ich getippt fälschlicherweise $
statt@
.
Aber der Compiler hat mir keinen Fehler gegeben und erfolgreich kompiliert.
Ich möchte wissen, was es ist und was es tut. Ich habe danach gesucht, aber ich konnte nichts finden.
Es ist jedoch nicht wie eine wörtliche Zeichenfolge, weil ich nicht schreiben kann:
string str = $"text\";
Weiß jemand, wofür $
vor String in C # steht?
string str = $"text";
Ich verwende Visual Studio 2015 CTP.
$@
, dann sind Sie gezwungen, dem"
Charakter zu entkommen , indem Sie verwenden""
. Dies ist nicht der Fall, wenn Sie nur verwenden$
.Es wird eine interpolierte Zeichenfolge erstellt .
Von MSDN
Ex :
Sie können Ausdrücke innerhalb der interpolierten Zeichenfolge verwenden
Das Schöne daran ist, dass Sie sich nicht um die Reihenfolge der Parameter kümmern müssen, wie Sie es tun
String.Format
.Wenn Sie nun einige Parameter entfernen möchten, müssen Sie alle Zählungen aktualisieren, was nicht mehr der Fall ist.
Beachten Sie, dass das gute Alte
string.format
immer noch relevant ist, wenn Sie kulturelle Informationen in Ihrer Formatierung angeben möchten .quelle
$
Kulturinformationen verwenden und angeben können, wenn Sie Ihre Daten$
mit der richtigen Kultur in eine Zeichenfolge innerhalb des Ausdrucks konvertieren , z{somevar.ToString(...,[Insert culture info here])}
.Beispielcode
Ausgabe
Es ist Interpolated Strings . Sie können eine interpolierte Zeichenfolge überall dort verwenden, wo Sie ein Zeichenfolgenliteral verwenden können. Wenn Ihr Programm den Code mit dem interpolierten Zeichenfolgenliteral ausführt, berechnet der Code ein neues Zeichenfolgenliteral, indem er die Interpolationsausdrücke auswertet. Diese Berechnung erfolgt jedes Mal, wenn der Code mit der interpolierten Zeichenfolge ausgeführt wird.
Das folgende Beispiel erzeugt einen Zeichenfolgenwert, bei dem alle Zeichenfolgeninterpolationswerte berechnet wurden. Es ist das Endergebnis und hat eine Typzeichenfolge. Alle Vorkommen von doppelten geschweiften Klammern
(“{{“ and “}}”)
werden in eine einzelne geschweifte Klammer umgewandelt.Nach der Ausführung über 2 Zeilen
message
enthält die Variable "Hallo, Welt".Referenz - MSDN
quelle
Coole Funktion. Ich möchte nur darauf hinweisen, warum dies besser ist als string.format, wenn es einigen Leuten nicht klar ist.
Ich habe jemanden gelesen, der order string.format zu "{0} {1} {2}" sagt, um den Parametern zu entsprechen. Sie müssen "{0} {1} {2}" nicht in string.format bestellen, sondern können auch "{2} {0} {1}" ausführen. Wenn Sie jedoch viele Parameter haben, z. B. 20, möchten Sie die Zeichenfolge wirklich auf "{0} {1} {2} ... {19}" setzen. Wenn es sich um ein gemischtes Durcheinander handelt, fällt es Ihnen schwer, Ihre Parameter in eine Reihe zu bringen.
Mit $ können Sie Parameter inline hinzufügen, ohne Ihre Parameter zu zählen. Dies erleichtert das Lesen und Verwalten des Codes erheblich.
Der Nachteil von $ ist, dass Sie den Parameter in der Zeichenfolge nicht einfach wiederholen können, sondern ihn eingeben müssen. Wenn Sie beispielsweise die Eingabe von System.Environment.NewLine satt haben, können Sie string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine) ausführen. aber in $ müssen Sie es wiederholen. Sie können $ "{0}" nicht ausführen und an string.format übergeben, da $ "{0}" "0" zurückgibt.
Nebenbei habe ich einen Kommentar in einem anderen duplizierten tpoic gelesen. Ich konnte es nicht kommentieren, also hier ist es. Er hat das gesagt
Erstellt mehr als ein String-Objekt. Das ist eigentlich nicht wahr. Wenn Sie dies in einer einzelnen Zeile tun, wird nur eine Zeichenfolge erstellt und im Zeichenfolgencache abgelegt.
Alle geben eine Zeichenfolge zurück und erstellen nur einen Wert im Cache.
Andererseits:
Erstellt 4 verschiedene Werte im Cache, da 4 ";" vorhanden sind.
Somit ist es einfacher, Code wie den folgenden zu schreiben, aber Sie würden fünf interpolierte Zeichenfolgen erstellen, wenn Carlos Muñoz korrigiert:
Dadurch wird eine einzelne Zeichenfolge im Cache erstellt, während Sie den Code sehr einfach lesen können. Ich bin mir über die Leistung nicht sicher, aber ich bin sicher, dass MS sie optimieren wird, wenn sie es nicht bereits tut.
quelle
String.Format()
und zur Laufzeit mit verkettetString.Concat
. Es ist also besser, dass Sie es nicht in mehrere Zeilen aufteilenBeachten Sie, dass Sie auch beide kombinieren können, was ziemlich cool ist (obwohl es etwas seltsam aussieht):
quelle
$@
oder@$
. Leider kann es nur sein$@
@
definiert, wie das String-Literal dargestellt wird.$
ist eine Abkürzung fürstring.Format
.$(@"");
string.Format
. Es ist zuckerhaltig, um einen Wert zu präsentieren, der auf a analysiert wird. Daherstring.Format
ist es teilweise sinnvoll, aber nicht vollständig.$
es sich im Grunde genommen um einen impliziten Funktionsaufruf handelt, während er@
Teil des Literal ist, genau wie derm
in einem Dezimalliteral. Deshalb gibt es nur eine logische Reihenfolge.$
, aber aus Gründen der maximalen Kompatibilität und nicht der harten Codierung, ob das Verzeichnis-Trennzeichen '/' oder '\' ist, und um zu vermeiden, dass der unvermeidliche Fehler einen doppelten Schrägstrich oder einen fehlenden Schrägstrich verursacht, wo es sein sollte Ich empfehle,Path.Combine()
bei der Arbeit mit Verzeichnissen und Dateien anstelle von Zeichenfolgenverkettungen zu verwenden.Es ist bequemer als string.Format und Sie können auch hier Intellisense verwenden.
Und hier ist meine Testmethode:
quelle
Es bedeutet String-Interpolation.
Es schützt Sie, da es der Zeichenfolgenbewertung einen Schutz für die Kompilierungszeit hinzufügt.
Sie erhalten keine Ausnahme mehr mit
string.Format("{0}{1}",secondParamIsMissing)
quelle
Das folgende Beispiel zeigt verschiedene Vorteile der Verwendung interpolierter Zeichenfolgen in
string.Format()
Bezug auf Sauberkeit und Lesbarkeit. Es zeigt auch, dass Code in{}
wie jedes andere Funktionsargument ausgewertet wird, genau wie wennstring.Format()
wir aufgerufen würden.quelle
$ Syntax ist nett, aber mit einem Nachteil.
Wenn Sie so etwas wie eine Zeichenfolgenvorlage benötigen, wird diese auf Klassenebene als Feld deklariert ... genau an einem Ort, wie es sein sollte.
Dann müssen Sie die Variablen auf derselben Ebene deklarieren ... was nicht wirklich cool ist.
Es ist viel schöner, die String.Format-Syntax für diese Art von Dingen zu verwenden
Die Verwendung von Globals ist nicht wirklich in Ordnung und außerdem funktioniert es auch nicht mit Globals
quelle
Ich weiß nicht, wie es funktioniert, aber Sie können es auch verwenden, um Ihre Werte zu erfassen!
Beispiel:
Natürlich können Sie "dies!" mit jeder Variablen oder irgendetwas Sinnvollem, genauso wie Sie auch die Registerkarte ändern können.
quelle
Das $ -Zeichen in der Zeichenfolge dient zur Definition der Interpolationszeichenfolge, die ein Merkmal in C # ist. Die Interpolation der Zeichenfolge ist eine "echte Zeichenfolge", die möglicherweise interpolierte Ausdrücke enthält
Für weitere Informationen ist dies die Quelle der Antwort und des Beispiels: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
quelle