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.