Comment interpoler des chaînes?


106

Je veux faire ce qui suit en C # (venant d'un arrière-plan Python):

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

Comment remplacer le jeton à l'intérieur de la chaîne par la valeur à l'extérieur de celle-ci?

Réponses:



270

Cela a été ajouté à partir de C # 6.0 (Visual Studio 2015+).

Exemple:

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!"

C'est du sucre syntaxique pour:

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

Ressources supplémentaires:

Interpolation de chaîne pour discussion C # (v2)

Aperçu du langage C # 6.0


Patch pour mono (daté 2009, votre kilométrage peut varier) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave


Cette fonctionnalité est une si belle chose. Surtout avec VS2015 et le support de l'éditeur afin que vous puissiez voir clairement les chaînes interpolées et obtenir l'intellisense. Cela fonctionne même avec des méthodes! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Patrick

14

Vous pouvez utiliser string.Formatpour déposer des valeurs dans des chaînes:

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

Une alternative consiste à utiliser l'opérateur de concaténation C #:

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

Si vous faites beaucoup de concaténations, utilisez la StringBuilderclasse qui est la plus efficace:

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

Si vous utilisez actuellement Visual Studio 2015 avec C # 6.0, essayez ce qui suit:

var strVar = "stack";

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

cette fonctionnalité est appelée interpolation de chaîne.


6

Il n'y a pas d'opérateur pour cela. Vous devez utiliser string.Format.

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

Malheureusement, string.Formatc'est une méthode statique, vous ne pouvez donc pas simplement écrire "This is {0}soverflow".Format(strVar). Certaines personnes ont défini une méthode d'extension, qui permet cette syntaxe.


5

Utilisez string.Format:

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


1

Vous avez 2 options. Vous pouvez soit utiliser String.Format, soit utiliser l'opérateur de concaténation.

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

OU

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

Sous les couvertures String.Format()utilise StringBuilder. StringBuilder est généralement plus efficace lors de la concaténation de nombreuses chaînes, mais l'opérateur de concaténation est parfait pour les opérations ponctuelles. String.Format()est utile lorsque le formatage doit être appliqué à la sortie, par exemple pour ajouter un remplissage ou des zéros non significatifs aux valeurs numériques. Donc, utiliser String.Format()dans une boucle va potentiellement instancier un grand nombre de StringBuilders. Dans cette situation, il est préférable d'utiliser un seul StringBuilder déclaré en dehors de la boucle et AppendFormat()à l'intérieur de la boucle.
David Clarke

1

Il existe un autre moyen d'implémenter des espaces réservés avec une chaîne: Remplacer, cela aide étrangement dans certaines situations:

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

1

Vous pouvez utiliser la manière suivante

Interpolation de chaîne

Le caractère spécial $ identifie un littéral de chaîne comme une chaîne interpolée. par exemple

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

Une chaîne interpolée est un littéral de chaîne qui peut contenir des expressions interpolées. Lorsqu'une chaîne interpolée est résolue en chaîne de résultat, les éléments avec des expressions interpolées sont remplacés par les représentations sous forme de chaîne des résultats de l'expression.

String.Format

Utilisez String.Format si vous devez insérer la valeur d'un objet, d'une variable ou d'une expression dans une autre chaîne.

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

0

Utilisation:

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

0

Vous pouvez accomplir cela avec Expansive: https://github.com/anderly/Expansive


C # a un mécanisme d'interpolation intégré. Il n'y a absolument aucune raison d'inclure une bibliothèque pour cette fonctionnalité.
Afficher le nom

2
@Displayname regarde la date sur la question. C # n'avait pas toujours d'interpolation de chaîne intégrée. Il a été ajouté en C # 6 en 2016. D'où la raison de ma réponse en 2014.
anderly
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.