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.