2012-10-23 14 views
20

C# 'da: Böyle bir ileti oluşturmak istiyorsam: "Merhaba Şu uçuşları sizin için sunuyoruz: Uçuş A, B, C, D. Hangisi Burada sadece kalın kısımdaki bölüm dinamiktir ve değerini çalışma zamanında geçiririm, ancak sol ve sağ parçaları sabittir. Bunu oluşturmak için, LeftMessage + bu değişkenler + RightMessage gibi bir şey oluşturabilirim. Ama iki ayrı sol ve sağ mesaj oluşturmaya gerek kalmadan bir kerede yapmanın bir yolu olup olmadığını merak ediyordum?Bir dizenin ortasına değişken değerler ekleyin

Çeviri amaçları için bu sol ve sağ iletileri dize kaynaklarına yerleştiriyorum, şimdi iki ayrı dize kaynağım var. Bu yüzden hepsini bir anda yapmanın bir yolu olup olmadığını görmek istedim? hatta kaydedebilirsiniz:

+0

Evet String.Join aramak() metodu Örnek String.Join ('', someVariable) ya da String.Format ("mesajı {0}. Ve geri kalanı için, aşağıdaki param sayacı (ler) 'nın metin {1} {2} {3}, vb. – MethodMan

+0

paramlarını belirtir. Dillerin değiştiğini ve geçerli kabul edilen yanıtın artık en iyisi olmadığını unutmayın. Örnek için http://stackoverflow.com/a/32512833/1856015 adresine bakın. string interpolasyon kullanarak –

cevap

24

Sen string.Format kullanabilirsiniz:

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); 

Sen kaynak dosyadan template yüklemeniz ve data sizin çalışma zamanı değerindedir.

Ancak, birden çok dile çeviri yapıyorsanız dikkatli olun: bazı durumlarda, farklı dillerde farklı simgeler ({0}) gerekir.

+1

Bu cevabı @Paolo ile tercih ediyorum. Kimin kazanacağını görelim. :) – Neolisk

+1

çeviri sırasında belirteci hakkında iyi bir çağrı. – DarkNightFan

+2

@DarkNightFan: acı deneyiminden :-) Sağdan sola yazılan diller için bu gibi dizeleri çevirdiğinizde, programlama cehenneminin yedinci döngüsüne ulaştınız ... –

2

1 Sen

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

2 Ayrıca

3 Sen Regex sınıfı kullanabilirsiniz string.Format

var result = string.Format("your right part {0} Your left Part", yourValue); 
kullanabilirsiniz string.Replace yöntemi kullanabilirsiniz ayrı ayrı "şablon" dizesi (örneğin Bu gibi) bir yapılandırma dosyasında depolamak ve oradan almak:

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: hoppala, üzgünüm @DanPuzey zaten biraz daha çok benim EDIT'e benzer (ama bir şey)

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

DÜZENLEME

16
önerdiğini bakın

kullanın String.Format

Öncesi 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

tüm yeni geliştirmeleri okuyabileceğim iyi bir site var mı? – MonsterMMORPG

+0

kod aracım (resharper), ilk formdan ikinci tanıma otomatik olarak düzeltme yapılmasını önerir, bu da (varsayılan olarak) tercih edilen sözdizimini gösterir. –

34

Şimdi (C# 6, Visual Studio 2015) bunu yapmak için daha özlü bir yol var: dize enterpolasyonu.another question's answer itibaren

:

C# 6 size string interpolation kullanabilirsiniz: Visual Studio bunun için vurgulama sözdizimi son derece okunabilir hale getirir ve jeton tüm kontrol edilir

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

.

İlgili konular