Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

14 Ocak 2010 Perşembe

Extension Class

Extension Class
using System;
using System.Diagnostics;
using System.Globalization;

namespace MedulaRADClassLib
{
static class ExtensionIEnumerable
{
    /// 
    /// IEnumerable tipinde dizi içinde parametrede verilen metoda dizi elemanlarını ve indeksini geçirir.
    /// 
    /// İçinde dönülecek dizinin tipi
    /// İçinde dönülecek dizi    /// Dizi elemanlarının ve elemanın indeks değerinin gönderileceği metot    public static void ForEachIndex(this IEnumerable e, Action del)
    {
        var i = 0;
        foreach (var cur in e)
        {
            del(cur, i);
        }
    }
}

static public class ExtensionClass
{
/// <summary>
/// String gelen değeri "" veya string.Empty veya NULL ise
/// null değeri döndürür
/// </summary>
/// <param name="_sGelen">
/// <returns>
[DebuggerHidden]
static public string IfIsNullOrEmptyConvertToNULL(this string _sGelen)
{
return string.IsNullOrEmpty(_sGelen)
? null
: _sGelen;
}

/// <summary>
/// String gelen değeri "" veya string.Empty veya NULL ise
/// DBNull.Value değeri döndürür ki DB ye "NULL" yazılsın.
/// </summary>
/// <param name="_sGelen">
/// <returns>
//[DebuggerHidden]
static public object IfIsNullOrEmptyConvertToDbNull(this string _sGelen)
{
return string.IsNullOrEmpty(_sGelen)
? "NULL"
: (object)"'" + _sGelen + "'";
}

/// <summary>
/// Object içinde s1 stringini arıyor,
/// s2 stringini arıyor,
/// s1 in bulunduğu pozisyona kendi uzunluğunu ekliyor,
/// s2 inin pozisyonuna kadar aradaki stringi çekiyor ve 
/// çevirmek istenen tipe dönüştürüp geri gönderiyoruz.
/// </summary>
/// <typeparam name="T">Dönüştürülecek tip
/// <param name="sGelen">Esas arama yapılacak string
/// <param name="s1">İçinde aranacak ilk string
/// <param name="s2">içinde arama yapılacak ikinci string
/// <param name="_bS1Mecbur">Eğer birinci string esas string içinde mecburen bulunacaksa, bu parametre TRUE olarak gönderilmeli.
/// Ve eğer ikinci string yoksa exception fırlatılacak. Bu parametre FALSE gönderilirse, ikinci string olmazsa,
/// esas stringin sonuna kadar metni alacak.
/// <param name="_bS2Mecbur">Eğer ikinci string esas string içinde mecburen bulunacaksa, bu parametre TRUE olarak gönderilmeli.
/// Ve eğer birinci string yoksa exception fırlatılacak. Bu parametre FALSE gönderilirse, birinci string olmazsa,
/// esas stringin sonuna kadar metni alacak.
/// <returns>Dönen değişken tipine göre değeri
[DebuggerHidden]
static public T Substring(this string sGelen, string s1, string s2, bool _bS1Mecbur, bool _bS2Mecbur) where T : IConvertible
{
int iS1 = sGelen.IndexOf(s1) + s1.Length;
int iS2 = sGelen.IndexOf(s2);

if (sGelen.IndexOf(s1) == -1 && _bS1Mecbur)
{
throw new ArgumentOutOfRangeException("s1", "Birinci string parametrenin esas string içinde mecburen bulunması gerekiyor ama yok.");
}

if (sGelen.IndexOf(s2) == -1 && _bS2Mecbur)
{
throw new ArgumentOutOfRangeException("s2", "İkinci string parametrenin esas string içinde mecburen bulunması gerekiyor ama yok.");
}

int iBas = (_bS1Mecbur) ? iS1 : 0;
int iSon = (_bS2Mecbur)
? iS2
: (0 <= (iS2 - iS1)
? (iS2 - iS1)
: sGelen.Length - iS1);

return sGelen.Substring(iBas, iSon).To();
//return default(T);
}


/// <summary>
/// Eğer _bOnceSonra = TRUE ise
/// String içinde s1 i arıyor onun uzunluğundan sonra başlamak üzere kalan tüm stringi
/// dönüş tipine göre çevirip değeri geri gönderiyoruz.
/// <example>
/// string s = "cem|1234" -> s.Substring>int<("|");
/// dersek... int tipinde 1234 alırız.
/// </example>
/// Eğer _bOnceSonra = FALSE ise
/// String içinde s1 i arıyor ve s1 in bulunduğu yere kadar başından itibaren tüm stringi
/// dönüş tipine göre çevirip değeri geri gönderiyoruz.
/// <example>
/// string s = "cem|1234" -> s.Substring>int<("|");
/// dersek... int tipinde cem| alırız.
/// </example>
/// </summary>
/// <typeparam name="T">Dönüş tipi
/// <param name="sGelen">Esas string
/// <param name="s1">Esas içinde aranacak string
/// <param name="_bOnceSonra">Eğer true ise sonrasını alır, false ise öncesini alır
/// <returns>Dönen değer
[DebuggerHidden]
static public T Substring(this string sGelen, string s1, bool _bOnceSonra) where T : IConvertible
{
int iS1 = sGelen.IndexOf(s1) + s1.Length;

if (iS1 > -1 && _bOnceSonra)
{
return sGelen.Substring(iS1).To();
}

if (iS1 > -1 && _bOnceSonra == false)
{
return sGelen.Substring(0, iS1).To();
}

return default(T);
}



/// <summary>
/// İçinde aranan string eğer ilk string içinde yoksa empty string döner
/// Eğer varsa ve pozisyonu içinde aranan stringin uzunluğundan küçük
/// </summary>
/// <param name="sGelen">
/// <param name="sAranan">
/// <returns>
[DebuggerHidden]
static public string SubStrVeArananLen(this string sGelen, string sAranan)
{
int iIndexOf = sGelen.IndexOf(sAranan);
if (iIndexOf < 0)
{
return string.Empty;
}

int iLen = iIndexOf + sAranan.Length;
if (iLen > sGelen.Length)
{
return string.Empty;
}

return sGelen.Substring(iLen);
}

/// <summary>
/// Gonderilen string içinde aranılan cKarakter ifadesinin kaç kez geçtiğini döndürür.
/// </summary>
/// <param name="sGelen">
/// <param name="cKarakter">
/// <returns>
[DebuggerHidden]
static public int KacAdetVar(this string sGelen, char cKarakter)
{
int iCount = 0;
for (int i = 0; i < sGelen.Length; i++)
{
if (sGelen[i] == cKarakter)
{
iCount++;
}
}
return iCount;
}

/// <summary>
/// Object cinsinden ve içinde dd-mm-yyyy veya daha farklı formatta stringi DateTime olarak dondurur.
/// </summary>
/// <param name="objGelen">
/// <param name="sFormat">
/// <returns>
[DebuggerHidden]
static public DateTime ParseExact(this object objGelen, string sFormat)
{
return DateTime.ParseExact(objGelen.ToString(), sFormat, new DateTimeFormatInfo());
}


/// <summary>
/// Gonderilen tarihde ayin ilk günü gelir.
/// </summary>
/// <param name="dtGelen">
/// <returns>
[DebuggerHidden]
static public DateTime AyinIlkGunTarihi(this DateTime dtGelen)
{
return new DateTime(dtGelen.Year, dtGelen.Month, 1);
}


/// <summary>
/// Gonderilen tarihin ay ve yılına bakılarak, o ayın son gunu alınır ve son gune gore tarih geri dondurulur.
/// </summary>
/// <param name="dtGelen">
/// <returns>
[DebuggerHidden]
static public DateTime AyinSonGunTarihi(this DateTime dtGelen)
{
return new DateTime(dtGelen.Year, dtGelen.Month, DateTime.DaysInMonth(dtGelen.Year, dtGelen.Month));
}

[DebuggerHidden]
static public Int32 ToInt(this string sGelen)
{
if (string.IsNullOrEmpty(sGelen))
{
throw (new ArgumentNullException("Int değere dönüştürülmek istenen STRING boş geldi."));
}
return Convert.ToInt32(sGelen);
}

[DebuggerHidden]
static public bool Sayimi(this object value)
{
string s = value.ToString();
if (s.Length == 0)
{
return false;
}

for (int i = 0; i < s.Length; i++)
{
if (!Char.IsDigit(s[i]))
{
return false;
}
}

return true;
}

[DebuggerHidden]
static public bool IsNullOrEmpty(this T obj)
{
if (typeof(T) == typeof(System.String))
{
if (obj == null)
{
return true;
}
return string.IsNullOrEmpty(obj.ToString());
}
return (Equals(obj, default(T)) || (obj.ToString() == ""));
}

[DebuggerHidden]
static public bool IsNullOrEmpty(this T[] obj)
{
bool sonuc = true;
for (int i = 0; i < obj.Length; i++)
{
if (i == 0)
{
sonuc = (Equals(obj[i], default(T)) || (obj[i].ToString() == ""));
}
else
{
sonuc = (sonuc && (Equals(obj[i], default(T)) || (obj[i].ToString() == "")));
}
}
return sonuc;
}

[DebuggerHidden]
public static T To(this object value) where T : IConvertible
{
if (value == DBNull.Value)
return default(T);

if (typeof(T) == typeof(bool))
return (T)Convert.ChangeType(Convert.ToInt32(value), typeof(T));

if (typeof(T) == typeof(string))
return (T)Convert.ChangeType(Convert.ToString(value).Trim(), typeof(T));

return (T)Convert.ChangeType(value, typeof(T));

}
}
}