Bagaimana cara menginterpolasi string?

106

Saya ingin melakukan hal berikut di C # (berasal dari latar belakang Python):

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

Bagaimana cara mengganti token di dalam string dengan nilai di luarnya?

sazr
sumber

Jawaban:

84
string mystr = string.Format("This is {0}overflow", strVar);

Dan Anda juga bisa menggunakan parameter bernama alih-alih indeks.

Darin Dimitrov
sumber
270

Ini telah ditambahkan pada C # 6.0 (Visual Studio 2015+).

Contoh:

var planetName = "Bob";
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"

Ini adalah gula sintaksis untuk:

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);

Sumber daya tambahan:

Interpolasi String untuk Diskusi C # (v2)

C # 6.0 Pratinjau Bahasa

Ashtonian
sumber
Patch untuk mono (tertanggal 2009, jarak tempuh Anda mungkin berbeda) tirania.org/blog/archive/2009/Dec-20.html
Gua Jefferey
1
Untuk pengguna mono: stackoverflow.com/questions/29208869/…
Jefferey Cave
Fitur ini adalah hal yang sangat indah. Terutama dengan VS2015 dan dukungan editor sehingga Anda dapat dengan jelas melihat string yang diinterpolasi dan mendapatkan intellisense. Ia bahkan bekerja dengan metode! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Patrick
14

Anda dapat menggunakan string.Formatuntuk menjatuhkan nilai menjadi string:

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

Alternatifnya adalah dengan menggunakan operator penggabungan C #:

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

Jika Anda melakukan banyak penggabungan, gunakan StringBuilderkelas yang lebih efisien:

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();
David Clarke
sumber
12

C # 6.0

string mystr = $"This is {strVar}overflow";
Sylvain Rodrigue
sumber
12

Jika saat ini Anda menggunakan Visual Studio 2015 dengan C # 6.0, coba berikut ini:

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

fitur itu disebut interpolasi string.

Sakal
sumber
6

Tidak ada operator untuk itu. Anda perlu menggunakan string.Format.

string strVar = "stack";
string mystr  = string.Format("This is {0}soverflow", strVar);

Sayangnya string.Formatadalah metode statis, jadi Anda tidak bisa begitu saja menulis "This is {0}soverflow".Format(strVar). Beberapa orang telah menetapkan metode ekstensi, yang memungkinkan sintaks ini.

CodesInChaos
sumber
5

Penggunaan string.Format:

string mystr = string.Format("This is {0}overflow", "stack");
Matthew Abbott
sumber
1

Anda memiliki 2 opsi. Anda bisa menggunakan String.Format atau Anda bisa menggunakan operator penggabungan.

String newString = String.Format("I inserted this string {0} into this one", oldstring);

ATAU

String newString = "I inserted this string " + oldstring + " into this one";
DwayneAllen
sumber
Di bawah selimut String.Format()menggunakan StringBuilder. StringBuilder biasanya lebih efisien saat menggabungkan banyak string, tetapi operator penggabungan sempurna untuk satu kali. String.Format()berguna saat pemformatan perlu diterapkan ke keluaran, misalnya untuk menambahkan pengisi atau nol di depan ke nilai numerik. Jadi menggunakan String.Format()in a loop berpotensi membuat banyak StringBuilders. Dalam situasi itu, lebih baik menggunakan StringBuilder tunggal yang dideklarasikan di luar loop dan AppendFormat()di dalam loop.
David Clarke
1

Ada satu cara lagi untuk mengimplementasikan placeholder dengan string. Ganti, anehnya membantu dalam situasi tertentu:

mystr = mystr.Replace("%soverflow", strVar);
Imam Talha
sumber
1

Anda bisa menggunakan cara berikut

Interpolasi string

Karakter $ special mengidentifikasi string literal sebagai string interpolasi. misalnya

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

String interpolasi adalah string literal yang mungkin berisi ekspresi interpolasi. Ketika string interpolasi diselesaikan menjadi string hasil, item dengan ekspresi terinterpolasi diganti dengan representasi string dari hasil ekspresi.

String.Format

Gunakan String.Format jika Anda perlu memasukkan nilai objek, variabel, atau ekspresi ke dalam string lain

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
Sunil Dhappadhule
sumber
0

Menggunakan:

strVar = "stack"
mystr  = String.Format("This is {0}", strVar);
Phillip Ngan
sumber
0

Anda dapat melakukannya dengan Expansive: https://github.com/anderly/Expansive

anderly
sumber
C # memiliki mekanisme interpolasi bawaan. Sama sekali tidak ada alasan untuk menyertakan pustaka untuk fungsi ini.
Nama tampilan
2
@Displayname lihat tanggal pada pertanyaan. C # tidak selalu memiliki interpolasi string bawaan. Itu ditambahkan di C # 6 pada tahun 2016. Oleh karena itu, alasan jawaban saya pada tahun 2014.
selanjutnya