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.