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?

Jawaban:



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


Patch untuk mono (tertanggal 2009, jarak tempuh Anda mungkin berbeda) tirania.org/blog/archive/2009/Dec-20.html
Gua Jefferey


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


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.


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.


5

Penggunaan string.Format:

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


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

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

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

0

Menggunakan:

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

0

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.