2012-10-23 14 views
20

In C#: Se voglio creare un messaggio come questo: "Ciao, abbiamo questi voli per voi: Volo A, B, C, D. Quale voi voglio "Inserire valori variabili nel mezzo di una stringa

dove solo la sezione in grassetto è dinamica e io passo il suo valore in fase di esecuzione, ma le sue parti sinistra e destra sono fisse. Posso creare qualcosa come LeftMessage + quelle variabili + RightMessage per creare questo. Ma mi stavo chiedendo se c'è un modo per farlo tutto in una volta senza la necessità di creare due messaggi separati sinistro e destro?

Per motivi di traduzione, inserisco i messaggi di sinistra e di destra all'interno delle risorse di stringa, quindi ora ho due risorse stringa separate. Quindi volevo vedere se c'è un modo per farlo tutto in una volta?

+0

Sì cercare String.Join() metodo esempio String.Join ('', someVariable) o String.Format ("messaggio {0}. E utilizzare il seguente contatore param (s) per il resto della i parametri di testo {1} {2} {3}, ecc. – MethodMan

+0

Si noti che le lingue cambiano e la risposta attualmente accettata non è necessariamente la migliore. Vedere http://stackoverflow.com/a/32512833/1856015 per un esempio –

risposta

24

È possibile utilizzare string.Format:

string template = "Hi We have these flights for you: {0}. Which one do you want"; 
string data = "A, B, C, D" 
string message = string.Format(template, data); 

è necessario caricare template dal file di risorse e data è il vostro valori di runtime.

Prestare attenzione se si sta traducendo in più lingue, tuttavia: in alcuni casi, sono necessari token diversi ({0}) in lingue diverse.

+1

Preferisco questa risposta sopra quella di @ Paolo. Vediamo chi vince. :) – Neolisk

+1

buona chiamata sul token in traduzione. – DarkNightFan

+2

@DarkNightFan: dall'esperienza amara :-) Quando si arriva a tradurre stringhe come questa per le lingue da destra a sinistra, hai raggiunto il settimo cerchio dell'inferno di programmazione ... –

2

1 È possibile utilizzare string.Replace metodo

var sample = "testtesttesttest#replace#testtesttest"; 
var result = sample.Replace("#replace#", yourValue); 

2 È inoltre possibile utilizzare string.Format

var result = string.Format("your right part {0} Your left Part", yourValue); 

3 È possibile utilizzare la classe Regex

11
String.Format("Hi We have these flights for you: {0}. Which one do you want", 
           flights); 

EDIT: si può anche salvare la stringa "modello" separatamente (ad esempio, potresti conservarlo in un file di configurazione e recuperare da lì), in questo modo:

string flights = "Flight A, B,C,D"; 

string template = @"Hi We have these flights for you: {0}. Which one do you want"; 
Console.WriteLine(String.Format(template, flights)); 

EDIT2: whoops, mi dispiace vedere che @DanPuzey aveva già suggerito qualcosa di molto simile alla mia EDIT (ma un po 'meglio)

16

Usa String.Format

pre C# 6,0

string data = "FlightA, B,C,D"; 
var str = String.Format("Hi We have these flights for you: {0}. Which one do you want?", data); 

C# 6,0-String Interpolation

string data = "FlightA, B,C,D"; 
var str = $"Hi We have these flights for you: {data}. Which one do you want?"; 

http://www.informit.com/articles/article.aspx?p=2422807

+0

c'è un buon sito che posso leggere tutti questi nuovi miglioramenti? – MonsterMMORPG

+0

il mio strumento di codice (ricondizionatore) suggerisce un autocorrect dal primo modulo al secondo, che indica che è (di default) la sintassi preferita. –

34

Ora c'è (C# 6, Visual Studio 2015) un modo più succinto per farlo: interpolazione delle stringhe.

Da another question's answer:

In C# 6 è possibile utilizzare string interpolation:

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

L'evidenziazione della sintassi per questa operazione in Visual Studio rende altamente leggibile e tutti i gettoni vengono controllati.

Problemi correlati