Używanie zmiennych wewnątrz łańcuchów


89

W PHP mogę wykonać następujące czynności:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Czy istnieje podobna konstrukcja języka w C #?

Wiem, że jest, String.Format();ale chcę wiedzieć, czy można to zrobić bez wywoływania funkcji / metody w ciągu.

Odpowiedzi:


223

W C # 6 możesz użyć interpolacji ciągów :

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

Podświetlanie składni tego w programie Visual Studio sprawia, że ​​jest on bardzo czytelny, a wszystkie tokeny są sprawdzane.


88

Ta funkcja nie jest wbudowana w język C # 5 lub niższy.
Aktualizacja: C # 6 obsługuje teraz interpolację ciągów, zobacz nowsze odpowiedzi.

Zalecanym sposobem na zrobienie tego byłoby String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Jednak napisałem małą bibliotekę open source o nazwie SmartFormat, która rozszerza się String.Formattak, że może używać nazwanych symboli zastępczych (poprzez odbicie). Więc możesz zrobić:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

Mam nadzieję że ci się spodoba!


2
Jaki rodzaj spadku wydajności wiąże się z używaniem implementacji odbicia w porównaniu ze standardowym ciągiem znaków.
styfle

Widzę, że masz już stronę wydajności na wiki. Wygląda to całkiem obiecująco. Dobra robota!
styfle

Tak, wydaje mi się, że strona dotycząca wyników prawdopodobnie odpowiada na Twoje pytanie, ale nie przeprowadziłem żadnych porównań między „Hello {0}” a „Hello {name}”. Oczywiście refleksja potrwa dłużej. Jednak użycie funkcji buforowania poprawia wydajność analizowania i może zminimalizować różnicę. Tak czy inaczej, wszystko jest SZYBKIE!
Scott Rippey

1
To już nie jest prawdą. C # 6 dodał to jako funkcję
Cole Johnson

5

Do C # 5 (-VS2013) musisz wywołać dla niej funkcję / metodę. Albo „normalna” funkcja, taka jak String.Formatalbo przeciążenie operatora +.

string str = "Hello " + name; // This calls an overload of operator +.

W C # 6 (VS2015) wprowadzono interpolację ciągów (opisaną w innych odpowiedziach).


5

Użyj następujących metod

1: Metoda pierwsza

var count = 123;
var message = $"Rows count is: {count}";

2: Metoda druga

var count = 123;
var message = "Rows count is:" + count;

3: Metoda trzecia

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Metoda czwarta

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Metoda piąta

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";

1
Byłoby miło dodać komentarz, dlaczego wybrałbyś każdą z tych metod.
ZombieCode
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.