web-dev-qa-db-fra.com

Comment interpoler des chaînes?

Je souhaite effectuer les opérations suivantes en C # (provenant 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?

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

Et vous pouvez aussi utiliser des paramètres nommés à la place des index.

83
Darin Dimitrov

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

Ceci est un sucre syntaxique pour:

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

Ressources supplémentaires:

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

Prévisualisation du langage C # 6.0

263
Ashtonian

Vous pouvez utiliser string.Format pour 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 classe StringBuilder qui est 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();
14
David Clarke

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.

10
Sakal

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.Format 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 permettant cette syntaxe.

5
CodesInChaos

Utilisez string.Format:

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

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

Consultez http://msdn.Microsoft.com/en-us/library/system.string.format.aspx pour plus de détails.

4
Bruno Silva

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

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

OR

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

Il existe un autre moyen d'implémenter des espaces réservés avec string.Replace, aide étrangement dans certaines situations:

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

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

0
anderly

Vous pouvez utiliser la manière suivante

Interpolation de chaîne

Le caractère spécial $ identifie un littéral de chaîne en tant que 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 pouvant contenir des expressions interpolées. Lorsqu'une chaîne interpolée est résolue en chaîne de résultat, les éléments comportant des expressions interpolées sont remplacés par les représentations sous forme de chaîne des résultats d'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.E.g.

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

Utilisation:

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