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.
1: public static bool IsAssignableFromAny(this object value, params Type[] args)
2: {
3: foreach (Type t in args)
4: {
5: if (value.GetType().IsAssignableFrom(t))
6: {
7: return true;
8: }
9: }
10: return false;
11: }
Przykład:
1: public class A {}
2: public class B {}
3: public class Boo : A {}
4:
5: Boo x = new Boo();
6: bool x.IsAssignableFromAny(typeof(A), typeof(B));
EqualsAny
Sprawdza czy dany obiekt jest równy którejś z wartości z listy argumentów.
1: public static bool EqualsAny<T>(this T value, params T[] args)
2: {
3: foreach (T t in args)
4: {
5: if (value.Equals(t))
6: {
7: return true;
8: }
9: }
10: return false;
11: }
Przykład:
1: int x = 5;
2: bool result = x.EqualsAny<int>(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ą.
1: public static T Default<T>(this T value, T defaultValue)
2: {
3: return value == null ? defaultValue : value;
4: }
Przykład:
1: int? x = null;
2: int? y = x.Default<int>(5);
ChangeType
Zmienia typ danego obiektu na podany. Metoda ta dobrze radzi sobie z typami Generic.
1: public static object ChangeType(this object value, Type conversionType)
2: {
3: if (conversionType == null)
4: {
5: throw new ArgumentNullException("conversionType");
6: }
7: if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
8: {
9: if (value == null)
10: {
11: return null;
12: }
13: NullableConverter nullableConverter = new NullableConverter(conversionType);
14: conversionType = nullableConverter.UnderlyingType;
15: }
16: return Convert.ChangeType(value, conversionType);
17: }
Przykład:
1: object x = 5.0;
2: object y = x.ChangeType(typeof(int));
ConvertTo
Skrócona i zarazem generyczna wersja ChangeType.
1: public static T ConvertTo<T>(this object value)
2: {
3: return (T)ChangeType(value, typeof(T));
4: }
Przykład:
1: object x = 5.0;
2: object y = x.ConvertTo<int>();
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.
1: public static bool Between(this int value, int min, int max)
2: {
3: return (value > min && value < max);
4: }
Przykład:
1: bool result = 5.Between(1, 3);
Kolejnym razem kilka pomocniczych metod rozszerzających i zarazem skracających działania na string'ach.
Ten artykuł jest widoczny także na:
ZINE.NETJeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.