Bir kitaptaki bazı C# alıştırmaları üzerinde çalışıyordum ve beni şaşırtan bir örnekle karşılaştım. Doğrudan kitaptan, çıktı satırı şu şekilde gösterilir:
Console.WriteLine($"\n\tYour result is {result}.");
Şimdi olduğu gibi, kod çalışıyor ve çift sonuç
beklendiği gibi gösteriliyor. Ancak, dizinin önündeki $ işaretinin neden orada olduğunu anlamadığım için onu kaldırmaya karar verdim ve şimdi kod, dizinin içeriği yerine {sonuç}
dizisinin adını çıktı olarak veriyor. Ne yazık ki kitap $'ın neden orada olduğunu açıklamıyor.
Dize biçimlendirme ve Console.WriteLine aşırı yükleme yöntemleriyle ilgili olarak VB 2015 yardımını ve Google'ı araştırıyorum. Bunun neden böyle olduğunu açıklayan bir şey göremiyorum. Herhangi bir tavsiye takdir edilecektir.
Bu, C# 6'da `Interpolated Strings' adı verilen yeni bir özelliktir.
Bunu anlamanın en kolay yolu şudur: enterpolasyonlu bir dize ifadesi, içerdiği ifadeleri ifadelerin ToString temsilleriyle değiştirerek bir dize oluşturur.
Bununla ilgili daha fazla ayrıntı için lütfen MSDN'e göz atın.
Şimdi, bunun hakkında biraz daha düşünün. **Bu özellik neden harika?
Örneğin, Nokta
sınıfınız var:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
2 örnek oluşturun:
var p1 = new Point { X = 5, Y = 10 };
var p2 = new Point {X = 7, Y = 3};
Şimdi, ekrana çıktı vermek istiyorsunuz. Genellikle kullandığınız 2 yol:
Console.WriteLine("The area of interest is bounded by (" + p1.X + "," + p1.Y + ") and (" + p2.X + "," + p2.Y + ")");
Gördüğünüz gibi, dizeleri bu şekilde birleştirmek kodu okumayı zorlaştırır ve hataya açık hale getirir. Daha güzel hale getirmek için string.Format()
kullanabilirsiniz:
Console.WriteLine(string.Format("The area of interest is bounded by({0},{1}) and ({2},{3})", p1.X, p1.Y, p2.X, p2.Y));
Bu da yeni bir sorun yaratmaktadır:
Bu nedenlerden dolayı, yeni özelliği kullanmalıyız:
Console.WriteLine($"The area of interest is bounded by ({p1.X},{p1.Y}) and ({p2.X},{p2.Y})");
Derleyici artık yer tutucuları sizin için tutuyor, böylece doğru argümanı indeksleme konusunda endişelenmenize gerek kalmıyor, çünkü sadece dizgiye yerleştiriyorsunuz.
Yazının tamamı için lütfen bu blogu okuyunuz.
Perl gibi dillerin uzun süredir sahip olduğu bir kavramdır ve şimdi bu yeteneği C#'ta da elde edeceğiz. String Interpolation'da, biz sadece dizenin önüne bir $ ekleyin (tıpkı kelimesi kelimesine @ kullandığımız gibi dizeleri). Daha sonra, sadece istediğimiz ifadeleri çevreliyoruz küme parantezleri (yani { ve }) ile enterpolasyon yapın:
String.Format() yer tutucularına çok benzer, ancak bir dizin yerine küme parantezleri içindeki ifadenin kendisidir. Aslında, String.Format() gibi görünmesi sürpriz olmamalıdır, çünkü gerçekten hepsi budur - derleyicinin perde arkasında String.Format() gibi davrandığı sözdizimsel şeker.
İşin en güzel yanı, derleyici artık yer tutucuları sizin için tutuyor, böylece doğru argümanı indeksleme konusunda endişelenmenize gerek kalmıyor, çünkü argümanı doğrudan dizgiye yerleştiriyorsunuz.
C# dize enterpolasyonu, dizeleri birleştirme, biçimlendirme ve manipüle etme yöntemidir. Bu özellik C# 6.0'da tanıtılmıştır. String interpolasyonunu kullanarak, string interpolation işleminin bir parçası olarak nesneleri ve ifadeleri kullanabiliriz.
Dize enterpolasyonunun sözdizimi '$' sembolü ile başlar ve ifadeler aşağıdaki sözdizimi kullanılarak bir parantez {} içinde tanımlanır.
{<interpolatedExpression>[,<alignment>][:<formatString>]}
Nerede?
Aşağıdaki kod örneği, dize enterpolasyonunun bir parçası olarak bir nesnenin, yazarın bulunduğu bir dizeyi birleştirir.
string author = "Mohit";
string hello = $"Hello {author} !";
Console.WriteLine(hello); // Hello Mohit !
Daha fazla bilgi için C#/.NET Küçük Harikalar: C# 6'da String Interpolasyonu