пятница, 10 апреля 2009 г.

Comparer с обобщенными методами

Последнее время часто использую методы с обобщенными аргументами. Довольно часто приходится сравнивать значения обобщенных типов между собой, сравнивать с default(T). Конструкции типа
while (!EqualityComparer<T>.Default.Equals(t, default(t))
{
    // do something
}
довольно сильно утомляют глаз. Следующий класс здорово облегчает жизнь:
public static class Comparer
{
    public static int Compare<T>(T a, T b)
    {
        return Comparer<T>.Default.Compare(a, b);
    }

    public static bool Equals<T>(T a, T b)
    {
        return EqualityComparer<T>.Default.Equals(a, b);
    }

    public static bool IsNullOrDefault<T>(T value)
    {
        return Equals(default(T), value);
    }
}
Теперь можно писать так:
while (!Comparer.Equals(t, default(t))
{
    // do something
}
И даже так:
while (!Comparer.IsNullOrDefault(t))
{
    // do something
}
Естественно, это имеет смысл только для сравнения компарером по-умолчанию.

Комментариев нет:

Отправить комментарий