Come interpolare le stringhe?


106

Voglio fare quanto segue in C # (proveniente da uno sfondo Python):

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

Come si sostituisce il token all'interno della stringa con il valore all'esterno di essa?

Risposte:



270

Questo è stato aggiunto a partire da C # 6.0 (Visual Studio 2015+).

Esempio:

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

Questo è zucchero sintattico per:

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

Risorse addizionali:

Interpolazione di stringhe per la discussione C # (v2)

Anteprima del linguaggio C # 6.0


Patch per mono (datata 2009, il tuo chilometraggio può variare) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave


Questa caratteristica è una cosa così bella. Soprattutto con VS2015 e il supporto dell'editor in modo da poter vedere chiaramente le stringhe interpolate e ottenere intellisense. Funziona anche con i metodi! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Patrick

14

È possibile utilizzare string.Formatper trascinare i valori nelle stringhe:

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

Un'alternativa consiste nell'usare l'operatore di concatenazione C #:

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

Se stai facendo molte concatenazioni usa la StringBuilderclasse che è più efficiente:

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();


12

Se attualmente utilizzi Visual Studio 2015 con C # 6.0, prova quanto segue:

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

quella caratteristica è chiamata interpolazione di stringhe.


6

Non esiste un operatore per questo. Devi usare string.Format.

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

Sfortunatamente string.Formatè un metodo statico, quindi non puoi semplicemente scrivere "This is {0}soverflow".Format(strVar). Alcune persone hanno definito un metodo di estensione, che consente questa sintassi.


5

Usa string.Format:

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


1

Hai 2 opzioni. È possibile utilizzare String.Format oppure è possibile utilizzare l'operatore di concatenazione.

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

O

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

Sotto le coperte String.Format()utilizza StringBuilder. StringBuilder è in genere più efficiente quando concatenano molte stringhe, ma l'operatore di concatenazione è perfetto per una tantum. String.Format()è utile quando la formattazione deve essere applicata all'output, ad esempio per aggiungere riempimento o zeri iniziali ai valori numerici. Quindi l'utilizzo String.Format()in un ciclo creerà potenzialmente un'istanza di molti StringBuilders. In quella situazione è meglio usare un singolo StringBuilder dichiarato fuori dal ciclo e AppendFormat()dentro il ciclo.
David Clarke

1

C'è un altro modo per implementare segnaposto con string.Replace, stranamente aiuta in determinate situazioni:

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

1

Puoi usare il modo seguente

Interpolazione di stringhe

Il carattere speciale $ identifica una stringa letterale come una stringa interpolata. per esempio

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

Una stringa interpolata è un valore letterale stringa che potrebbe contenere espressioni interpolate. Quando una stringa interpolata viene risolta in una stringa di risultato, gli elementi con espressioni interpolate vengono sostituiti dalle rappresentazioni di stringa dei risultati dell'espressione.

String.Format

Utilizzare String.Format se è necessario inserire il valore di un oggetto, una variabile o un'espressione in un'altra stringa

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


0

Puoi farlo con Expansive: https://github.com/anderly/Expansive


C # ha un meccanismo di interpolazione incorporato. Non c'è assolutamente alcun motivo per includere una libreria per questa funzionalità.
Nome visualizzato

2
@Displayname guarda la data sulla domanda. C # non ha sempre avuto l'interpolazione di stringhe incorporata. È stato aggiunto in C # 6 nel 2016. Da qui il motivo della mia risposta nel 2014.
anderly
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.