Aracılığıyla paylaş


Birden çok dizeyi birleştirme (C# Kılavuzu)

Birleştirme , bir dizeyi başka bir dizenin sonuna ekleme işlemidir. işlecini + kullanarak dizeleri birleştirirsiniz. Dize değişmez değerleri ve dize sabitleri için birleştirme derleme zamanında gerçekleşir; çalışma zamanı birleştirmesi gerçekleşmez. Dize değişkenleri için birleştirme yalnızca çalışma zamanında gerçekleşir.

Not

Bu makaledeki C# örnekleri Try.NET satır içi kod çalıştırıcısında ve oyun alanında çalıştırılır. Etkileşimli bir pencerede örnek çalıştırmak için Çalıştır düğmesini seçin. Kodu yürüttkten sonra yeniden Çalıştır'ı seçerek kodu değiştirebilir ve değiştirilen kodu çalıştırabilirsiniz. Değiştirilen kod etkileşimli pencerede çalışır veya derleme başarısız olursa, etkileşimli pencerede tüm C# derleyicisi hata iletileri görüntülenir.

Dize değişmez değerleri

Aşağıdaki örnek, kaynak kodda okunabilirliği geliştirmek için uzun bir dize değişmez değerini daha küçük dizelere böler. Kod, uzun dize değişmez değerini oluşturmak için küçük dizeleri birleştirir. Parçalar, derleme zamanında tek bir dizede birleştirilir. Söz konusu dizelerin sayısından bağımsız olarak çalışma zamanı performans maliyeti yoktur.

// Concatenation of literals is performed at compile time, not run time.
string text = "Historically, the world of data and the world of objects " +
"have not been well integrated. Programmers work in C# or Visual Basic " +
"and also in SQL or XQuery. On the one side are concepts such as classes, " +
"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
"are tables, columns, rows, nodes, and separate languages for dealing with " +
"them. Data types often require translation between the two worlds; there are " +
"different standard functions. Because the object world has no notion of query, a " +
"query can only be represented as a string without compile-time type checking or " +
"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
"objects in memory is often tedious and error-prone.";

System.Console.WriteLine(text);

+ ve += işleçleri

Dize değişkenlerini birleştirmek için veya işleçlerini, dize ilişkilendirmesini String.Format veya , String.Concatveya String.JoinStringBuilder.Append yöntemlerini kullanabilirsiniz+. += Operatör + kullanımı kolaydır ve sezgisel kod sağlar. Bir deyimde birkaç + işleç kullansanız bile, dize içeriği yalnızca bir kez kopyalanır. Aşağıdaki kod, dizeleri birleştirmek için ve += işleçlerini kullanma + örneklerini gösterir:

string userName = "<Type your name here>";
string dateString = DateTime.Today.ToShortDateString();

// Use the + and += operators for one-time concatenations.
string str = "Hello " + userName + ". Today is " + dateString + ".";
System.Console.WriteLine(str);

str += " How are you today?";
System.Console.WriteLine(str);

Dize ilişkilendirme

Bazı ifadelerde, aşağıdaki kodda gösterildiği gibi dize ilişkilendirmesini kullanarak dizeleri birleştirmek daha kolaydır:

string userName = "<Type your name here>";
string date = DateTime.Today.ToShortDateString();

// Use string interpolation to concatenate strings.
string str = $"Hello {userName}. Today is {date}.";
System.Console.WriteLine(str);

str = $"{str} How are you today?";
System.Console.WriteLine(str);

Not

Dize birleştirme işlemlerinde C# derleyicisi null dizeyi boş dizeyle aynı şekilde işler.

C# 10'da başlayarak, yer tutucular için kullanılan tüm ifadeler de sabit dizeler olduğunda sabit bir dize başlatmak için dize ilişkilendirmesini kullanabilirsiniz.

String.Format

Dizeleri birleştirmek için başka bir yöntem de şeklindedir String.Format. Az sayıda bileşen dizesinden bir dize oluştururken bu yöntem iyi çalışır.

StringBuilder

Diğer durumlarda, dizeleri birleştirdiğiniz kaynak dize sayısını bilmediğiniz bir döngüde birleştiriyor olabilirsiniz ve gerçek kaynak dize sayısı büyük olabilir. StringBuilder sınıfı bu senaryolar için tasarlanmıştır. Aşağıdaki kod, dizeleri birleştirmek için sınıfının yöntemini StringBuilder kullanırAppend.

// Use StringBuilder for concatenation in tight loops.
var sb = new System.Text.StringBuilder();
for (int i = 0; i < 20; i++)
{
    sb.AppendLine(i.ToString());
}
System.Console.WriteLine(sb.ToString());

Dize birleştirmeyi veya StringBuilder sınıfı seçme nedenleri hakkında daha fazla bilgi edinebilirsiniz.

String.Concat veya String.Join

Bir koleksiyondan dizeleri birleştirmeye yönelik bir diğer seçenek de yöntemi kullanmaktır String.Concat . Sınırlayıcının kaynak dizeleri ayırması gerekiyorsa yöntemini kullanın String.Join . Aşağıdaki kod, her iki yöntemi de kullanarak bir sözcük dizisini birleştirir:

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var unreadablePhrase = string.Concat(words);
System.Console.WriteLine(unreadablePhrase);

var readablePhrase = string.Join(" ", words);
System.Console.WriteLine(readablePhrase);

LINQ ve Enumerable.Aggregate

Sonunda LINQ ve Enumerable.Aggregate yöntemini kullanarak bir koleksiyondaki dizeleri birleştirebilirsiniz. Bu yöntem bir lambda ifadesi kullanarak kaynak dizeleri birleştirir. Lambda ifadesi, her dizeyi var olan birikmeye ekleme işini yapar. Aşağıdaki örnek, dizideki her sözcük arasına boşluk ekleyerek bir sözcük dizisini birleştirir:

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);

Bu seçenek, her yineleme için bir ara dize oluşturduğundan koleksiyonları birleştirmek için diğer yöntemlerden daha fazla ayırmaya neden olabilir. Performansı iyileştirmek kritikse, yerine bir koleksiyonu birleştirmek için sınıfınıString.Concatveya veya String.Join yöntemini göz önünde bulundurunStringBuilder.Enumerable.Aggregate

Ayrıca bkz.