$
est un raccourci pour String.Format
et est utilisé avec des interpolations de chaînes, qui est une nouvelle fonctionnalité de C # 6. Comme utilisé dans votre cas, il ne fait rien, tout comme string.Format()
ne ferait rien.
Il prend tout son sens lorsqu'il est utilisé pour créer des chaînes en référence à d'autres valeurs. Ce qui devait auparavant être écrit:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = string.Format("{0},{1},{2}", anInt, aBool, aString);
Devient maintenant:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = $"{anInt},{aBool},{aString}";
Il existe également une autre forme, moins connue, d'interpolation de chaînes $@
(l'ordre des deux symboles est important). Il permet de @""
mélanger les fonctionnalités d'une chaîne pour prendre $""
en charge les interpolations de chaîne sans avoir besoin de \\
tout au long de votre chaîne. Donc, les deux lignes suivantes:
var someDir = "a";
Console.WriteLine($@"c:\{someDir}\b\c");
affichera:
c:\a\b\c
$@
, alors vous êtes obligé d'échapper au"
personnage en utilisant""
. Ce n'est pas le cas lorsque vous utilisez uniquement$
.Il crée une chaîne interpolée .
Depuis MSDN
ex:
Vous pouvez utiliser des expressions dans la chaîne interpolée
La bonne chose à ce sujet est que vous n'avez pas à vous soucier de l'ordre des paramètres comme vous le faites avec
String.Format
.Maintenant, si vous voulez supprimer certains paramètres, vous devez aller mettre à jour tous les décomptes, ce qui n'est plus le cas.
Notez que le bon vieux
string.format
reste pertinent si vous souhaitez spécifier des informations culturelles dans votre mise en forme .la source
$
et spécifier les informations de culture si vous convertissez vos données en chaîne à l'intérieur de l'$
expression en utilisant la culture correcte, par exemple{somevar.ToString(...,[Insert culture info here])}
.Exemple de code
Production
Il s'agit de chaînes interpolées . Vous pouvez utiliser une chaîne interpolée partout où vous pouvez utiliser un littéral de chaîne. Lorsque l'exécution de votre programme exécutait le code avec le littéral de chaîne interpolé, le code calcule un nouveau littéral de chaîne en évaluant les expressions d'interpolation. Ce calcul se produit à chaque exécution du code avec la chaîne interpolée.
L'exemple suivant produit une valeur de chaîne où toutes les valeurs d'interpolation de chaîne ont été calculées. Il s'agit du résultat final et de type chaîne. Toutes les occurrences de doubles accolades
(“{{“ and “}}”)
sont converties en une seule accolade.Après avoir exécuté plus de 2 lignes, la variable
message
contient "Hello, World".Référence - MSDN
la source
Fonction cool. Je veux juste souligner l'accent mis sur pourquoi c'est mieux que string.format s'il n'est pas évident pour certaines personnes.
J'ai lu quelqu'un disant order string.format à "{0} {1} {2}" pour faire correspondre les paramètres. Vous n'êtes pas obligé de commander "{0} {1} {2}" dans string.format, vous pouvez également faire "{2} {0} {1}". Cependant, si vous avez beaucoup de paramètres, comme 20, vous voulez vraiment séquencer la chaîne sur "{0} {1} {2} ... {19}". Si c'est un désordre mélangé, vous aurez du mal à aligner vos paramètres.
Avec $, vous pouvez ajouter des paramètres en ligne sans compter vos paramètres. Cela rend le code beaucoup plus facile à lire et à maintenir.
L'inconvénient de $ est que vous ne pouvez pas répéter facilement le paramètre dans la chaîne, vous devez le saisir. Par exemple, si vous en avez assez de taper System.Environment.NewLine, vous pouvez faire string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine), mais, en $, vous devez le répéter. Vous ne pouvez pas faire $ "{0}" et le passer à string.format car $ "{0}" renvoie "0".
En passant, j'ai lu un commentaire dans un autre tpoic dupliqué. Je ne pouvais pas commenter, alors, le voici. Il a dit que
crée plusieurs objets chaîne. Ce n'est pas vrai en fait. Si vous faites cela sur une seule ligne, il ne crée qu'une seule chaîne et est placé dans le cache de chaînes.
Tous renvoient une chaîne et ne créent qu'une seule valeur dans le cache.
D'autre part:
Crée 4 valeurs différentes dans le cache car il y a 4 ";".
Ainsi, il sera plus facile d'écrire du code comme le suivant, mais vous créeriez cinq chaînes interpolées comme Carlos Muñoz l'a corrigé:
Cela crée une seule chaîne dans le cache alors que vous avez un code très facile à lire. Je ne suis pas sûr des performances, mais je suis sûr que MS l'optimisera s'il ne le fait pas déjà.
la source
String.Format()
, puis concaténées au moment de l'exécution avecString.Concat
. Il est donc préférable de ne pas le diviser en plusieurs lignesNotez que vous pouvez également combiner les deux, ce qui est plutôt cool (bien que cela semble un peu étrange):
la source
$@
ou@$
. Malheureusement, cela ne peut être que$@
@
définit comment représenter le littéral de chaîne.$
est un raccourci pourstring.Format
. Pensez-y comme$(@"");
string.Format
. C'est sucré pour présenter une valeur qui est analysée à unstring.Format
, donc cela a du sens en partie, mais pas entièrement.$
c'est essentiellement un appel de fonction implicite alors qu'il@
fait partie du littéral, tout commem
dans un littéral décimal. C'est pourquoi il n'y a qu'un seul ordre logique.$
, mais dans un souci de compatibilité maximale et non de codage en dur si le séparateur de répertoire est '/' ou '\', et en évitant également le vissage inévitable provoquant une double barre oblique ou une barre oblique manquante là où il devrait ont été un, je recommande d'utiliserPath.Combine()
au lieu d'utiliser des concaténations de chaînes lorsque vous travaillez avec des répertoires et des fichiers.C'est plus pratique que string.Format et vous pouvez également utiliser intellisense ici.
Et voici ma méthode de test:
la source
Cela signifie une interpolation de chaîne.
Il vous protégera car il ajoute une protection de temps de compilation sur l'évaluation de la chaîne.
Vous n'aurez plus d'exception avec
string.Format("{0}{1}",secondParamIsMissing)
la source
L'exemple suivant met en évidence divers avantages de l'utilisation de chaînes interpolées en termes
string.Format()
de propreté et de lisibilité. Il montre également que le code à l'intérieur{}
est évalué comme tout autre argument de fonction, comme s'ilstring.Format()
était appelé.la source
La syntaxe $ est agréable, mais avec un inconvénient.
Si vous avez besoin de quelque chose comme un modèle de chaîne, celui-ci est déclaré au niveau de la classe comme champ ... bien au même endroit comme il se doit.
Ensuite, vous devez déclarer les variables au même niveau ... ce qui n'est pas vraiment cool.
Il est beaucoup plus agréable d'utiliser la syntaxe string.Format pour ce genre de choses
L'utilisation de globaux n'est pas vraiment ok et en plus de cela - cela ne fonctionne pas non plus avec les globaux
la source
Je ne sais pas comment cela fonctionne, mais vous pouvez également l'utiliser pour tabuler vos valeurs!
Exemple :
Bien sûr, vous pouvez remplacer "ceci!" avec n'importe quelle variable ou quelque chose de significatif, tout comme vous pouvez également changer l'onglet.
la source
le signe $ dans la chaîne est pour la définition de la chaîne d'interpolation qui est une fonctionnalité en C # pour interpoler la chaîne est une "vraie chaîne" qui pourrait contenir des expressions interpolées
pour plus d'informations, voici la source de la réponse et de l'exemple: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
la source