Utilizzo di variabili all'interno di stringhe


89

In PHP posso fare quanto segue:

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

Esiste un costrutto di linguaggio simile in C #?

So che c'è String.Format();ma voglio sapere se può essere fatto senza chiamare una funzione / metodo sulla stringa.

Risposte:


223

In C # 6 puoi usare l'interpolazione di stringhe :

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

L'evidenziazione della sintassi per questo in Visual Studio lo rende altamente leggibile e tutti i token vengono controllati.


88

Questa funzionalità non è incorporata in C # 5 o inferiore.
Aggiornamento: C # 6 ora supporta l'interpolazione di stringhe, vedere le risposte più recenti.

Il modo consigliato per farlo sarebbe con String.Format:

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

Tuttavia, ho scritto una piccola libreria open-source chiamata SmartFormat che si estende in String.Formatmodo da poter utilizzare segnaposto con nome (tramite riflessione). Quindi, potresti fare:

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

Spero ti piaccia!


2
Che tipo di penalizzazione delle prestazioni c'è per l'utilizzo della tua implementazione di reflection rispetto alla stringa standard.
stile

Vedo che hai già una pagina delle prestazioni sul wiki. Sembra abbastanza promettente. Bel lavoro!
stile

Sì, credo che la pagina del rendimento risponda probabilmente alla tua domanda, ma non ho eseguito alcun confronto tra "Hello {0}" e "Hello {name}". Ovviamente la riflessione richiederà più tempo. Tuttavia, l'utilizzo della funzionalità di memorizzazione nella cache migliora le prestazioni di analisi e potrebbe ridurre al minimo la differenza. Ad ogni modo, le cose sono VELOCI!
Scott Rippey

1
Questo non è più vero. C # 6 ha aggiunto questo come funzionalità
Cole Johnson

5

Fino a C # 5 (-VS2013) devi chiamare una funzione / metodo per esso. Una funzione "normale" come String.Formato un sovraccarico dell'operatore +.

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

In C # 6 (VS2015) è stata introdotta l'interpolazione di stringhe (come descritto da altre risposte).


5

Usa i seguenti metodi

1: metodo uno

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

2: metodo due

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

3: Metodo tre

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

4: metodo quattro

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

5: metodo cinque

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

1
Sarebbe bello aggiungere un commento sul motivo per cui sceglieresti di utilizzare ciascuno di questi metodi.
ZombieCode
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.