2012-10-23 13 views
20

W języku C#: Jeśli chcę utworzyć wiadomość taką jak: "Witaj, mamy te loty dla Ciebie: Lot A, B, C, D. Który z nich chcesz "Wstaw wartości zmiennych w środku ciągu

, gdzie tylko sekcja pogrubiona jest dynamiczna i przekazuję jej wartość w czasie wykonywania, ale jej prawa i lewa część są stałe. Mogę stworzyć coś takiego jak LeftMessage + te zmienne + RightMessage, aby to stworzyć. Ale zastanawiałem się, czy istnieje sposób na zrobienie tego wszystkiego naraz, bez potrzeby tworzenia dwóch osobnych wiadomości lewych i prawych?

Do celów tłumaczeniowych umieszczam te lewe i prawe wiadomości wewnątrz zasobów ciągów, więc teraz mam dwa oddzielne zasoby ciągów. Więc chciałem sprawdzić, czy istnieje sposób, aby zrobić to wszystko naraz?

+0

Tak patrzeć string.join() w przykład string.join ('', someVariable) lub String.Format ("wiadomość {0}. I użyć po licznik (ów) param dla reszty parametry tekstowe {1} {2} {3}, itp. – MethodMan

+0

Należy pamiętać, że języki zmieniają się, a obecnie zaakceptowana odpowiedź nie jest już koniecznie najlepsza. Patrz przykład http://stackoverflow.com/a/32512833/1856015 za pomocą interpolacji ciągów –

Odpowiedz

24

Można użyć 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); 

należy załadować template z pliku zasobów i data jest Twoje wartości starcie.

Należy jednak zachować ostrożność, jeśli tłumaczymy na wiele języków: w niektórych przypadkach potrzebne są różne tokeny ({0}) w różnych językach.

+1

Preferuję tę odpowiedź przez @Paolo. Zobaczmy, kto wygra. :) – Neolisk

+1

dobre wołanie o token w tłumaczeniu. – DarkNightFan

+2

@DarkNightFan: z gorzkiego doświadczenia :-) Kiedy będziesz tłumaczył takie napisy dla języków pisanych od prawej do lewej, dotrzesz do siódmego koła programowania piekła ... –

2

1 Można użyć string.Replace metodę

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

2 Można również użyć string.Format

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

3 Można użyć klasy Regex

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

EDIT: można nawet zaoszczędzić ciąg "szablon" oddzielnie (na przykład możesz przechowywać go w pliku konfiguracyjnym i odzyskać go stamtąd), podobnie jak to:

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: ups, przepraszam, widzę, że @DanPuzey już sugerował coś bardzo podobnego do mojego EDIT (choć nieco lepiej)

16

Zastosowanie 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

Czy są jakieś dobre strony, które można przeczytać wszystkie takie nowe ulepszenia? – MonsterMMORPG

+0

moje narzędzie kodu (resharper) sugeruje autokorekty od pierwszego formularza do drugiego, wskazując, że jest to (domyślnie) preferowaną składnię. –

34

Istnieje teraz (C# 6, Visual Studio 2015) bardziej zwięzły sposób to zrobić: interpolacja ciągów znaków.

Od another question's answer:

W języku C# 6 można użyć string interpolation:

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

Składnia podkreślając za to w Visual Studio sprawia, że ​​bardzo czytelny i wszystkie żetony są sprawdzane.

Powiązane problemy