17 marca 2009, 01:19 dario Komentarze (0)

Kilka przydatnych metod - extension methods

Poniżej prezentuję kilka metod rozszerzających (extension method), które napisałem jakiś czas temu i do dziś wykorzystuję w swoich projektach.

IsAssignableFromAny

Sprawdza czy dany obiekt jest pochodną któregoś z podanych typów.

public static bool IsAssignableFromAny(this object value, params Type[] args)
{
    foreach (Type t in args)
    {
        if (value.GetType().IsAssignableFrom(t))
        {
            return true;
        }
    }
    return false;
}

Przykład:

public class A {}
public class B {}
public class Boo : A {}
 
Boo x = new Boo();
bool x.IsAssignableFromAny(typeof(A), typeof(B));

EqualsAny

Sprawdza czy dany obiekt jest równy którejś z wartości z listy argumentów.

public static bool EqualsAny(this T value, params T[] args)
{
    foreach (T t in args)
    {
        if (value.Equals(t))
        {
            return true;
        }
    }
    return false;
}

Przykład:

int x = 5;
bool result = x.EqualsAny(1, 2, 3, 5, 7, 9);

Default

Sprawdza czy wartość obiektu jest pusta (null). Jeśli nie to zwraca ten obiekt, w przeciwnym przypadku zwraca wartość domyślną.

public static T Default(this T value, T defaultValue)
{
    return value == null ? defaultValue : value;
}

Przykład:

int? x = null;
int? y = x.Default(5);

ChangeType

Zmienia typ danego obiektu na podany. Metoda ta dobrze radzi sobie z typami Generic.

public static object ChangeType(this object value, Type conversionType)
{
    if (conversionType == null)
    {
        throw new ArgumentNullException("conversionType");
    }
    if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
    {
        if (value == null)
        {
            return null;
        }
        NullableConverter nullableConverter = new NullableConverter(conversionType);
        conversionType = nullableConverter.UnderlyingType;
    }
    return Convert.ChangeType(value, conversionType);
}

Przykład:

object x = 5.0;
object y = x.ChangeType(typeof(int));

ConvertTo

Skrócona i zarazem generyczna wersja ChangeType.

public static T ConvertTo(this object value)
{
    return (T)ChangeType(value, typeof(T));
}

Przykład:

object x = 5.0;
object y = x.ConvertTo();

Between

Sprawdza czy dana wartość liczbowa typu int zawiera się w przedziale. Równie dobrze można dodać klony tej metody dla: double, single, float.

public static bool Between(this int value, int min, int max)
{
    return (value > min && value < max);
}

Przykład:

bool result = 5.Between(1, 3);

Kolejnym razem kilka pomocniczych metod rozszerzających i zarazem skracających działania na string'ach.

Tagi:

.Net

Komentarze zablokowane

O autorze

Dariusz Gil - projektant i programista aplikacji internetowych budowanych na platformie Microsoft w technologii ASP.NET (C#) oraz MS SQL Server. Obecnie właściciel (narazie :)) jednoosobowej firmy Softio.

Filtruj używając APML