Вспомогательный класс для null и пустые чеки


У меня есть статический вспомогательный класс:

public static class Helper
{
    public static bool IsNull<T>(this T value) where T : class
    {
        return (value == null);
    }

    public static bool NotNull<T>(this T value) where T : class
    {
        return (!value.IsNull<T>());
    }

    public static bool IsNullOrEmpty(this string value)
    {
        return string.IsNullOrEmpty(value);
    }

    public static bool NotNullAndNotEmpty(this string value)
    {
        return (!value.IsNullOrEmpty());
    }

    public static bool NotNullAndNotEmpty(this ICollection value)
    {
        return (value.NotNull<ICollection>() && (value.Count > 0));
    }

    public static bool IsNullOrEmpty(this ICollection value)
    {
        return (!value.NotNullAndNotEmpty());
    }
}

Это удобно (привычка) для меня, чтобы использовать этот помощник, но я не уверен, что это правильно (стоит). Как насчет производительности? Есть ли другие причины, чтобы не использовать его?



858
9
задан 7 декабря 2011 в 02:12 Источник Поделиться
Комментарии
2 ответа

Это становится липкие точки. Есть те, кто будет спорить горячо , что метод расширения должен не работать на нуль ссылок, и есть те, кто хорошо с этим.

Лично я не против расширения методы на значение NULL , если имя является четким показателем того, что нуль - это возможность (как IsNullOrEmpty) но как я уже сказал, Это мое мнение и может не совпадать с другим.

Не беспокойтесь о производительности, способ звонки не серьезные последствия и проверить, как эти методы устраняют некоторые проблемы читабельности более сложные выражения при сохранении кода. После всего, что строку.IsNullOrEmpty() делает, но он делает это через статический метод, а не метод расширения.

Так что единственная проблема, на самом деле, вы можете получить отодвинуть, что эти методы расширения в отличие от обычных статических методов, но вы получите различные мнения о том, является ли вызов метода расширения на нуль плохо/хорошо.

Можно утверждать, Майкрософт запрещает в LINQ методы расширения нулевой последовательности, но опять же Microsoft также не запрещает расширение метод вызывает на нуль источника в целом.

Так что, выбор за вами, у меня нет проблемы с ними, так как фамилии явно указать значение null является общепринятым, но я могу видеть обе стороны аргумента.

На стороне записки, я бы держал свои именования последовательны:


  • NotNull -> IsNotNull

  • NotNullAndNotEmpty -> IsNotNullAndNotEmpty

10
ответ дан 7 декабря 2011 в 02:12 Источник Поделиться

Я не вижу именно то, что выигрыш для вас с этим вспомогательный класс. Большинство методов, которые вы показали, похоже на некоторые накладные расходы. Например:

public static bool IsNullOrEmpty(this string value) 
{
return string.IsNullOrEmpty(value);
}

Хотя это обеспечит вам синтаксис свободно в коде. Производительность не будет кусать вас, ваших не очень тяжелые вещи внутри ваши методы расширения.

0
ответ дан 7 декабря 2011 в 02:12 Источник Поделиться