Selamlar, Bu yazımda C# StringBuilder Sınıfı kullanımından bahsedeceğim. Genelde string’ler ile çalışırken += operatörünü kullanırız. Yani bir text oluşturma işleminde üretilen text verileri uç uca eklemek istediğimizde kullanırız. Önceki dersim olan C# HTML Div ile Tablo Düzeni Oluşturma yazısında dikkat ederseniz hep += operatörünü kullandık. Aslında burada C# StringBuilder Sınıfı da kullanabiliriz.
C# StringBuilder Sınıfı Kullanımı
Öncelikle C# StringBuilder Sınıfı kullanımını bir kaç örnek ile anlatayım sonra yukarıda verdiğim linkteki örneği stringbuilder ile tekrar yaparsak nasıl yapmamız gerektiğine bakalım
StringBuilder Metodları
Burada size iki tane metottan bahsedeceğim.
- Append()
- AppendLine()
1 – Append()
Append kelimesi, eklemek, iliştirmek anlamına gelir. Append metodu kendisine parametre olarak gelen metni kendindeki mevcut metne ekler. Bir örnek üzerinde görelim.
StringBuilder sb = new StringBuilder(); sb.Append(34); sb.Append(46); MessageBox.Show(sb.ToString());
Burada 34, 46 sayıları, “string” olarak yan yana eklenir.
NOT: Hangi türü kullanırsanız kullanın, StringBuilder’in adında anlayacağınız gibi, birleştirilen tüm veriler string türüne çevrilir.
Yukarıdaki kodun çıktısı 3446 olacaktır.
Eğer diyelim ki 34’ü ekledikten sonra alt satıra geçsin istiyorsanız 34 ve 46 satırlarının arasında şu kodu eklemeniz gerekir.
sb.Append(Environment.NewLine);
Bu kodu nerede kullanırsanız kullanın bir alt satıra geçilmesini sağlar. Eğer yaptığınız işlemler sebebi ile Environment.NewLine komutu etki etmiyor ise “\r” komutunu kullanabilirsiniz.
sb.Append("\r");
“\r” komutu da alt satıra geçilmesini sağlar.
2 – AppendLine()
Yok ben environment ya da “\r” ile uğraşmak istemiyorum derseniz o zaman bu metodu kullanabilirsiniz. AppendLine() adından da anlaşılacağı gibi “Satır Ekleme” işlemi yapar. Satır olarak ekleme yaptığından da doğal olarak alt satıra geçilmiş olur.
StringBuilder sb = new StringBuilder(); sb.AppendLine(34); sb.AppendLine(46); MessageBox.Show(sb.ToString());
Yukarıdaki kodlarımızı bu şekilde değiştirirsek, kodların çıktısı;
34
46
şeklinde olacaktır.
Giriş kısmında verdiğim linke giderseniz orada hep += kullanıldığını fark edersiniz. O yazıdaki kodları StringBuilder ile de kullanabiliriz.
Değişken tanımladığımız kısımda bir StringBuilder tanımlaması yapalım
StringBuilder sb_html = new StringBuilder();
Şimdi döngülere gelelim ve += gördüğümüz satırları aşağıdaki gibi AppendLine() metodu ile değiştirelim.
if (rows > 0 && column > 0) { sb_html.AppendLine("<div class=" + Class1 + ">"); if (fr.chk_responsive.CheckState == CheckState.Unchecked) { sb_html.AppendLine( "<div class=" + Class2 + ">"); } for (int row = 0; row < rows; row++) { sb_html.AppendLine( "<div class=" + Class3 + ">"); for (int col = 0; col < column; col++) { sb_html.AppendLine( "<div class=" + Class4 + "> </div>"); } sb_html.AppendLine( "</div>"); } sb_html.AppendLine( "</div>"); sb_html.AppendLine("</div> "); } else MessageBox.Show("Satır ve Sütun 0 dan büyük olmalıdır.");
Burada AppendLine() metodunu kullanmayı tercih ettim çünkü bir HTML çıktısı verileceğinden her satır alt alta olsun istedim. :)
return olarak da;
return sb_html.TosString();
göndereceğiz. Böylece StringBuilder ile kodlarımızı yenilemiş olduk.
NOT: Bazı işlemlerde, += operatörünü kullanmak C# OutOfMemoryException ‘a neden oluyor. Bu sorunu bizzat yaşadım. Böyle bir hata alıyorsanız C# StringBuilder kullanımı sorununuzu çözecektir. Bu sorunu yaşadığım işlem şöyleydi. SQL den çektiğim yaklaşık 500 kadar satırı, += kullanarak, hazırladığım bir formattaki string içindeki belirli ifadeler ile Replace() yapıyordum. Bu işlem sırasında her zaman C# OutOfMemoryException hatası alıyordum. += operatörü değil de StringBuilder kullandığımda bu hatayı tekrar asla almadım. 500’den fazla kayıtlı işlemlerde bile…
C# StringBuilder Sınıfı kullanımı yazımda bu kadardı arkadaşlar. Umarım sizlere bir faydası olmuştur.
Tüm Exceptions derslerime bu bağlantıdan ulaşabilirsiniz. Bu Exception hakkında fazla detay için Microsoft.Docs sitesinde bakabilirsiniz.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
458. yazı bitti.