Stringbuilder | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar stringbuilder

StringBuilder alternatifi olarak String.Join

07 February 2012 Yorum yapılmamış

String sınıfının immutable olduğunu duymayanımız kalmamıştır (bknz; string sınıfı neden immutable?)

string tipindeki bir değişkenin değeri üzerinde sürekli değişiklik yapıp Garbage Collector‘a gereksiz iş oluşturmak yerine, StringBuilder sınıfını kullanırız (Garbage Collector hakkında detaylı bilgi için bknz; Garbage Collector Temelleri ve Performans Noktaları)

Çeşitli sebeplerden dolayı (Loglama, XML veya JSON veri üretme, vs) sınıflarımızın ToString() method’larını override ederiz (bknz; ToString() Method’unu override etmek)

ToString() method’undan geriye string değer döndüreceğimiz için method içerisinde string değer tutabilecek bir değişkene ihtiyaç duyarız. Bu değişken yukarıda bahsettiğimiz nedenlerden dolayı genelde StringBuilder tipinde olur.

Örnek ProductOrderCollection sınıfımızın ProductID ve Orders isminde property‘leri olduğunu varsayalım;

public class ProductOrderCollection
{
	public int ProductID { get; set; }

	public IEnumerable<Order> Orders{ get; set; }
}

ToString() method’unu override ettiğimiz örnek kod parçası;

public override string ToString()
{
	StringBuilder sb = new StringBuilder();
	sb.Append("Product{Id=");
	sb.Append(this.Id);
	sb.Append(",Orders=");
	if (this.Orders == null)
	{
		sb.Append("null");
	}
	else
	{
		sb.Append("[");
		for (int i = 0; i < this.Orders.Length; i++)
		{
			if (i > 0 && i < this.Orders.Length - 1)
			{
				sb.Append(",");
			}

			sb.Append(this.Orders[i]);
		}

		sb.Append("]");
	}

	sb.Append("}");

	return sb.ToString();
}

Yukarıdaki örnek kod sayesinde ProductOrderCollection sınıfının verilerinden JSON değer üretebiliriz.

StringBuilder sınıfı yerine String.Join methodunu kullanarak yapacak olsaydık;

public override string ToString()
{
	StringBuilder sb = new StringBuilder();
	sb.Append("Product{Id=");
	sb.Append(this.Id);
	sb.Append(",Orders=");
	if (this.Orders == null)
	{
		sb.Append("null");
	}
	else
	{
		sb.Append("[");
		sb.Append(string.Join(",", this.Orders));
		sb.Append("]");
	}

	sb.Append("}");

	return sb.ToString();
}

Hatta if/else kod parçasını daha da kısaltabiliriz;

public override string ToString()
{
	StringBuilder sb = new StringBuilder();
	sb.Append("Product{Id=");
	sb.Append(this.Id);
	sb.Append(",Orders=");
	sb.Append(this.Orders == null ? "null" : "[" + string.Join(",", this.Orders) + "]");
	sb.Append("}");

	return sb.ToString();
}

StringBuilder sınıfını hiç kullanmamak için;

public override string ToString()
{
	return string.Join("Product{Id=", this.Id, ",Orders=", this.Orders == null ? "null" : "[" + string.Join(",", this.Orders) + "]", "}");
}

C# MD5 yöntemi ile metin şifreleme

14 August 2011 Yorum yapılmamış

Aşağıdaki küçük fonksiyon yardımıyla string tipindeki değişkenlerin içeriğini MD5 yöntemi ile şifreleyebiliriz.

Öncelikle kodumuzun using kısmına System.Security.Cryptography namespace‘ini eklememiz lazım.

Böylece MD5CryptoServiceProvider sınıfından yeni bir örnek (instance) oluşturabilir, ve şifreleme sağlayıcısı (crypto service provider) olarak kullanabiliriz.

using System.Text;
using System.Security.Cryptography;

public static string Sifrele(string Metin)
{
	MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

	byte[] ba = Encoding.UTF8.GetBytes(Metin);
	ba = md5.ComputeHash(ba);

	StringBuilder sb = new StringBuilder();
	foreach (byte b in ba)
	{
		sb.Append(b.ToString("x2").ToLower());
	}

	return sb.ToString();
}