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?

sazr
la source

Réponses:

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

Et vous pouvez également utiliser des paramètres nommés au lieu d'index.

Darin Dimitrov
la source
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

Ashtonien
la source
Patch pour mono (daté 2009, votre kilométrage peut varier) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave
1
Pour les utilisateurs mono: stackoverflow.com/questions/29208869/…
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();
David Clarke
la source
12

C # 6.0

string mystr = $"This is {strVar}overflow";
Sylvain Rodrigue
la source
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.

Sakal
la source
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.

CodesInChaos
la source
5

Utilisez string.Format:

string mystr = string.Format("This is {0}overflow", "stack");
Matthew Abbott
la source
4

Vous devriez utiliser String.Format(). La syntaxe est un peu différente, des espaces réservés numériques sont utilisés à la place.

Exemple:

String.Format("item {0}, item {1}", "one", "two")

Jetez un œil à http://msdn.microsoft.com/en-us/library/system.string.format.aspx pour plus de détails.

Bruno Silva
la source
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";
DwayneAllen
la source
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);
Talha Imam
la source
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));
Sunil Dhappadhule
la source
0

Utilisation:

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

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

Anderly
la source
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