C'de dizeleri birleştirme#

Tavsiye

Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın.

Başka bir dilden mi geliyorsunuz? + ile C# birleştirme, Java ve JavaScript ile benzerlik gösterir. C#, değişkenlerden dize oluşturmak için tercih edilen yöntem olarak, JavaScript şablon değişmezlerine ve Python f dizelerine benzer dize enterpolasyonunu ($"{x}") sunar. C#, bir döngü içinde dize oluşturmak için, Java'daki StringBuilder'e çok benzeyen StringBuilder sunar.

Birleştirme , yeni bir dize oluşturmak için bir dizeyi diğerinin sonuna ekler. C# size birleştirmeniz için çeşitli yollar sunar ve en iyi seçenek sabit bir değer kümesini mi yoksa koleksiyonu mu birleştirdiğinize veya döngüde parça parça bir dize oluşturup oluşturmadığınıza bağlıdır.

Dize sabitlerini birleştir

Dize değişmez değerlerini veya sabitlerini ile +birleştirdiğinizde, derleyici bunları derleme zamanında birleştirir. Uzun bir sabiti birkaç satıra bölmek, çalışma zamanında herhangi bir ek maliyet oluşturmadan kaynak kodun okunabilirliğini iyileştirir:

// The compiler joins adjacent string literals at compile time,
// so splitting a long literal across lines has no run-time cost.
string message =
    "This is the first sentence of a longer message. " +
    "This is the second sentence. " +
    "This is the third and final sentence.";

Console.WriteLine(message);
// => This is the first sentence of a longer message. This is the second sentence. This is the third and final sentence.

+ ve += işleçlerini kullanma

Dize değişkenlerini birleştirmek için işlecini + kullanarak yeni bir dize oluşturun veya += var olan bir dizeye ekleyin. İşleç + sezgiseldir ve tek bir ifadede birkaç işleç zincirleseniz bile derleyici dize içeriğini yalnızca bir kez kopyalar:

string name = "Alex";
string day = "Monday";

// Use + to build a string from variables and literals.
string greeting = "Hello " + name + ". Today is " + day + ".";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.

// Use += to append to an existing string.
greeting += " How are you today?";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday. How are you today?

Uyarı

Dize birleştirmede, C# bir dizeyi boş bir null dizeyle aynı şekilde ele alır, bu nedenle birleştirme null sonucuna hiçbir şey eklemez.

Dize ilişkilendirmeyi kullanma

Hesaplanan ifadeleri bir dizeye gömmek için, String.Format öğesinin C tarzı biçimlendirmeden devraldığı {0} ve {1} gibi konumsal yer tutucular yerine dize enterpolasyonunu tercih edin. Enterpolasyon, her ifadeyi değerinin göründüğü yere doğrudan yerleştirir; böylece sonuç dizesi okunabilir kalır ve bir argümanı yanlış konumlandıramazsınız:

string name = "Alex";
string day = "Monday";

// String interpolation reads better than a chain of + operators.
string greeting = $"Hello {name}. Today is {day}.";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.

İlişkili tüm ifadeler bir sabit dize olduğunda, ilişkilendirilmiş sonucu bir const dizeye atayabilirsiniz.

Dize koleksiyonunu birleştir

Bir koleksiyonun öğelerini birleştirmek için, bunları ayırıcı olmadan birleştirmek veya String.Concat her öğe arasına bir ayırıcı yerleştirmek için kullanınString.Join:

string[] words = ["The", "quick", "brown", "fox"];

// Concat joins the sequence with no separator.
string runTogether = string.Concat(words);
Console.WriteLine(runTogether);
// => Thequickbrownfox

// Join places a separator between each element.
string sentence = string.Join(' ', words);
Console.WriteLine(sentence);
// => The quick brown fox

string.Join virgülle ayrılmış değerler veya boşlukla ayrılmış sözcükler gibi sınırlandırılmış çıktıya ihtiyacınız olduğunda doğru araçtır.

Döngü içinde dize oluşturma

Dizeler sabit olduğundan her + veya += işlem yeni bir dize oluşturur. Bir döngü içinde birçok parçayı art arda eklediğinizde, bu bellek ayırma maliyeti birikir. StringBuilder sınıfı bunun yerine sonucu tek bir arabellekte oluşturur:

// StringBuilder builds a string in place, which suits loops
// that append many pieces.
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
    builder.AppendLine($"Line {i}");
}

Console.Write(builder.ToString());
// => Line 1
// => Line 2
// => Line 3

Derleme zamanında parça sayısı büyükse veya bilinmiyorsa, StringBuilder kullanın. Sabit, küçük bir değer kümesi için + işleç ve dize ilişkilendirmesi daha nettir. Her yaklaşımın en iyi ne zaman performans gösterdiğine ilişkin yönergeler için bkz. string ve StringBuilder türleri.

Ayrıca bakınız