Utilisation de variables à l'intérieur de chaînes

90

En PHP, je peux faire ce qui suit:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Existe-t-il une construction de langage similaire en C #?

Je sais qu'il y en a String.Format();mais je veux savoir si cela peut être fait sans appeler une fonction / méthode sur la chaîne.

thwd
la source

Réponses:

224

En C # 6, vous pouvez utiliser l' interpolation de chaîne :

string name = "John";
string result = $"Hello {name}";

La mise en évidence de la syntaxe pour cela dans Visual Studio le rend hautement lisible et tous les jetons sont vérifiés.

Fenton
la source
88

Cette fonctionnalité n'est pas intégrée à C # 5 ou inférieur.
Mise à jour: C # 6 prend désormais en charge l'interpolation de chaîne, voir les nouvelles réponses.

La méthode recommandée pour ce faire serait avec String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Cependant, j'ai écrit une petite bibliothèque open-source appelée SmartFormat qui s'étend String.Formatpour pouvoir utiliser des espaces réservés nommés (via la réflexion). Donc, vous pouvez faire:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

J'espère que vous aimez!

Scott Rippey
la source
2
Quel genre de pénalité de performance y a-t-il pour l'utilisation de votre implémentation de réflexion par rapport à la chaîne standard.
styfle
Je vois que vous avez déjà une page de performance sur le wiki. Cela semble assez prometteur. Bon travail!
styfle
Oui, je pense que la page de performances répond probablement à votre question, mais je n'ai effectué aucune comparaison entre "Hello {0}" et "Hello {name}". Évidemment, la réflexion prendra plus de temps. Cependant, l'utilisation de la fonction de mise en cache améliore les performances d'analyse et peut minimiser la différence. Quoi qu'il en soit, les choses sont RAPIDES!
Scott Rippey
1
Ce n'est plus vrai. C # 6 a ajouté ceci en tant que fonctionnalité
Cole Johnson
5

Jusqu'à C # 5 (-VS2013), vous devez appeler une fonction / méthode pour cela. Soit une fonction "normale" telle que String.Formatsoit une surcharge de l'opérateur +.

string str = "Hello " + name; // This calls an overload of operator +.

En C # 6 (VS2015), l'interpolation de chaînes a été introduite (comme décrit par d'autres réponses).

Anders Abel
la source
5

Utilisez les méthodes suivantes

1: Première méthode

var count = 123;
var message = $"Rows count is: {count}";

2: Méthode deux

var count = 123;
var message = "Rows count is:" + count;

3: Méthode trois

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Méthode quatre

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Méthode cinq

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";
Abn Najaf
la source
1
Ce serait bien d'ajouter un commentaire expliquant pourquoi vous choisiriez d'utiliser chacune de ces méthodes.
ZombieCode le