Dizelerin içindeki değişkenleri kullanma


91

PHP'de şunları yapabilirim:

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

C #'da benzer bir dil yapısı var mı?

Var olduğunu biliyorum String.Format();ama dizede bir işlev / yöntem çağırmadan yapılıp yapılamayacağını bilmek istiyorum.

Yanıtlar:


225

C # 6'da dize enterpolasyonunu kullanabilirsiniz :

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

Visual Studio'da bunun sözdizimi vurgulaması, onu yüksek oranda okunabilir hale getirir ve tüm belirteçler kontrol edilir.


88

Bu işlevsellik C # 5 veya altında yerleşik değildir.
Güncelleme: C # 6 artık dize enterpolasyonunu destekliyor, daha yeni yanıtlara bakın.

Bunu yapmanın önerilen yolu şudur String.Format:

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

Ancak, SmartFormat adında küçük bir açık kaynak kitaplığı yazdım String.Formatve bu, adlandırılmış yer tutucular (yansıtma yoluyla) kullanabilmesi için genişletildi . Yani şunları yapabilirsiniz:

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

Umarım beğenirsin!


2
Yansıma uygulamanızı standart dizgiye karşı kullanmak için ne tür bir performans cezası vardır?
styfle

Wiki'de zaten bir performans sayfanız olduğunu görüyorum . Oldukça umut verici görünüyor. İyi iş!
styfle

Evet, performans sayfasının sorunuzu yanıtladığını düşünüyorum, ancak "Merhaba {0}" ile "Merhaba {ad}" arasında herhangi bir karşılaştırma yapmadım. Açıktır ki yansıma daha uzun sürecektir. Ancak, önbelleğe alma özelliğini kullanmak ayrıştırma performansını artırır ve farkı en aza indirebilir. Her iki durumda da işler HIZLI!
Scott Rippey

1
Bu artık doğru değil. C # 6 bunu bir özellik olarak ekledi
Cole Johnson

6

Aşağıdaki yöntemleri kullanın

1: Birinci Yöntem

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

2: İkinci Yöntem

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

3: Üçüncü Yöntem

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

4: Dördüncü Yöntem

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

5: Beşinci Yöntem

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

1
Neden bu yöntemlerin her birini kullanmayı seçeceğiniz konusunda bir yorum eklemek güzel olurdu.
ZombieCode

5

C # 5'e (-VS2013) kadar bunun için bir işlev / yöntem çağırmanız gerekir. String.Format+ İşleci gibi "normal" bir işlev veya aşırı yük.

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

C # 6'da (VS2015) dize enterpolasyonu tanıtıldı (diğer yanıtlarda açıklandığı gibi).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.