Kullandığım genişletme metotlarım
Programlarımda, web sitelerimde kullandığım genişletme metotlarım (extension methods)
Sizlerle web sitelerimde kullandığım Genişletme Metotlarımı paylaşmak istedim.
Genişletme metotları (Extension methods), C# 3.0 ile hayatımıza giren güzel bir özelliktir. En yalın olarak, var olan tiplerin/nesnelerin yapısını bozmadan bunlara ek özellik kazandırmaktadır.
Örnek vermek gerekirse, programlarımızda yoğun olarak kullandığımız bir metot vardır: Convert.ToInt32(). Biz bir stringi ne zaman sayıya çevirmek istesek şunun gibi bir kod kullanırız:
int sayi = Convert.ToIn32(txtSayi.Text);
İşte Genişletme metotları bu gibi durumlarda devreye giriyor, yukarıdaki kodu aşağıdaki gibi kim yazmak istemez ki?
int sayi = txtSayi.Text.ToInt32();
Genişletme metodunun hazırlanması da bir o kadar kolay, static bir sınıf içerisine, statik bir metod ekliyorsunuz, metodun ilk parametresini this ile işaretliyorsunuz (bu parametre, metodun hangi tip/nesne üzerinde çalışacağını belirtir)
Hemen ToInt32() metodunu göstereyim:
public static class GenelIslemler { public static int ToInt32(this object sayi) { try { if (sayi == null) throw new Exception(); int x = Convert.ToInt32(sayi); return x; } catch (Exception) { return 0; } } }
Diğer Genişletme metotlarımı da teker teker göstereyim, merak etmeyin sayfanın altında download linkini bulacaksınız :)
1) Bir stringin içerisinde a-z, A-Z,0-9 hariç diğer tüm karakterleri temizleme:
public static string ToOnlyCharacters(this string s) { s = s.Trim(); if (string.IsNullOrEmpty(s)) return ""; Regex r = new Regex("[^a-zA-Z0-9]"); s = r.Replace(s, ""); return s; }
2) Akıllı URL üretmek için bir stringi URL formatına dönüştürme:
public static string ToURL(this string s) { if (string.IsNullOrEmpty(s)) return ""; if (s.Length > 80) s = s.Substring(0, 80); s = s.Replace("ş", "s"); s = s.Replace("Ş", "S"); s = s.Replace("ğ", "g"); s = s.Replace("Ğ", "G"); s = s.Replace("İ", "I"); s = s.Replace("ı", "i"); s = s.Replace("ç", "c"); s = s.Replace("Ç", "C"); s = s.Replace("ö", "o"); s = s.Replace("Ö", "O"); s = s.Replace("ü", "u"); s = s.Replace("Ü", "U"); s = s.Replace("'", ""); s = s.Replace("\"", ""); Regex r = new Regex("[^a-zA-Z0-9_-]"); s = r.Replace(s, "-"); if (!string.IsNullOrEmpty(s)) while (s.IndexOf("--") > -1) s = s.Replace("--", "-"); if (s.StartsWith("-")) s = s.Substring(1); if (s.EndsWith("-")) s = s.Substring(0, s.Length - 1); return s; }
3) Bir stringi verilen miktarda karakterler barındıracak şekilde satırlara bölme:
public static string ToMultiLineString(this string str,int adet) { string yeni = ""; for (int i = 0; i < str.Length; i += adet) { if (i > 0) yeni += "<br/>"; if (i + adet < str.Length) yeni += str.Substring(i, adet); else yeni += str.Substring(i); } return yeni; }
4) Bir bilginin sayı olup olmadığını test etme:
public static bool IsInteger(this Object sayi) { try { if (sayi == null) throw new Exception(); Convert.ToInt32(sayi); return true; } catch (Exception) { return false; } }
5) Bir bilgiyi sayıya çevirme:
(Siz isterseneniz catch'te hata fırlatabilirsiniz)
public static int ToInt32(this object sayi) { try { if (sayi == null) throw new Exception(); int x = Convert.ToInt32(sayi); return x; } catch (Exception) { return 0; } }
6) Tarihi formatlı bir stringe çevirme:
public static String TarihYaz(DateTime tarih, bool full) { if (full) return TarihYaz(tarih); //DateTime tarih = Convert.ToDateTime(obj); DateTime simdi = DateTime.Now; String s; if (simdi.Date == tarih.Date) s = "Bugün"; else if (tarih.Date.AddDays(1.0).Date == simdi.Date) s = "Dün"; else s = String.Format("{0:00}.{1:00}.{2}", tarih.Day, tarih.Month, tarih.Year); return s.ToString(); }
public static String TarihYaz(DateTime tarih) { //DateTime tarih = Convert.ToDateTime(obj); DateTime simdi = DateTime.Now; String s; if (tarih.Hour == 0 && tarih.Minute == 0 && tarih.Second == 0) { if (simdi.Date == tarih.Date) s = "Bugün"; else if (tarih.Date.AddDays(1.0).Day == simdi.Date.Day) s = "Dün"; else s = String.Format("{0:00}.{1:00}.{2}", tarih.Day, tarih.Month, tarih.Year); } else { if (simdi.Date == tarih.Date) s = String.Format("Bugün {0:00}:{1:00}", tarih.Hour, tarih.Minute); else if (tarih.Date.AddDays(1.0).Day == simdi.Date.Day) s = String.Format("Dün {0:00}:{1:00}", tarih.Hour, tarih.Minute); else s = String.Format("{0:00}.{1:00}.{2} {3:00}:{4:00}", tarih.Day, tarih.Month, tarih.Year, tarih.Hour, tarih.Minute); } return s.ToString(); }
7) Textboxlardan alınan bilgileri temizleme
public static String ToClearText(this String s, bool satirSonu) { s = s.Replace("<", "<"); s = s.Replace(">", ">"); s = s.Replace("script", "scr_ipt"); s = s.Replace("'", "`"); s = s.Replace("\"", "`"); if (satirSonu) s = s.Replace(Environment.NewLine, SatirSonu); s = s.Trim(); return s; }
public static String ToClearText(this String s) { s = ToClearText(s, false); return s; }
8) Bir stringteki html satır sonlarını (<br/> <=> EOL) dosya satır sonuna çevirme:
(ve tersi)
public const string SATIRSONU = "<br />"; public static String NewLine2BR(this String s) { s = s.Replace(Environment.NewLine, SATIRSONU); return s; } public static String BR2NewLine(this String s) { s = s.Replace(SATIRSONU, Environment.NewLine); return s; }
9) Bilgileri tarih be bool tiplerine dönüştürme:
public static DateTime ToDateTime(this string s) { try { return Convert.ToDateTime(s); } catch (Exception) { return DateTime.MinValue; } } public static bool ToBoolean(this object s) { try { return Convert.ToBoolean(s); } catch (Exception) { return false; } }
10) Image nesnelerini orantılı bir şekilde küçültme:
Favorimdir :)
public static void Boyutlandir(this System.Web.UI.WebControls.Image image, int MaxWidth, int MaxHeight) { System.Drawing.Image img = null; try { if (image.ImageUrl.StartsWith("http://") || image.ImageUrl.StartsWith("https://")) img = System.Drawing.Image.FromStream(new System.Net.WebClient().OpenRead(image.ImageUrl)); else img = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(image.ImageUrl)); if (img.Width > MaxWidth || img.Height > MaxHeight) { double widthRatio = 1.0; if ((int)MaxWidth > 0) widthRatio = (double)img.Width / (double)MaxWidth; double heightRatio = 1.0; if ((int)MaxHeight > 0) heightRatio = (double)img.Height / (double)MaxHeight; double ratio = Math.Max(widthRatio, heightRatio); int newWidth = (int)(img.Width / ratio); int newHeight = (int)(img.Height / ratio); image.Width = Unit.Pixel(newWidth); image.Height = Unit.Pixel(newHeight); } } catch (Exception) { } finally { if (img != null) img.Dispose(); } }
11) Bir stringin solundan X adet karakter alma:
public static string SoldanMetinAl(this string metin, int uzunluk) { if (metin.Length < uzunluk) return metin; else return metin.Substring(0, uzunluk) + ".."; }
12) Bir bilginin tarih olup olmadığının testi:
public static bool IsDate(this string tarih) { try { if (tarih == null) throw new Exception(); Convert.ToDateTime(tarih); return true; } catch (Exception) { return false; } }
13) Bir bilginin geçerli bir email adresi / URL olup olmadığıın testi:
public static bool IsEmail(this string inputEmail) { if (string.IsNullOrEmpty(inputEmail)) return false; string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Regex re = new Regex(strRegex); if (re.IsMatch(inputEmail)) return (true); else return (false); }
public static bool IsURL(this string str) { Regex r = new Regex(@"(ftp|http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"); return r.IsMatch(str); }
Yukarıdaki tüm metotları ve bonus birkaç metodu daha indirmek için tıklayınız.
Herkese kolay gelsin :)
#genişletme #metod #extension #method #C #CSharp