четверг, 4 ноября 2010 г.

Расширение класса string

Часто экземпляры класса string приходиться проверять на пустоту или null используя метод IsNullOrEmpty().

Или, например, такой код:

public void Foo(string value) {
        if (string.IsNullOrEmpty(value))
                throw new ArgumentNullException();

        // Проверка для строк состоящих из пробельных символов
        if (string.IsNullOrEmpty(value.Trim()))
                throw new ArgumentNullException();
        // ...
}

Однако такую проверку можно заменить на вызов метода экземпляра класса string.

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

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

Теперь экземпляры класса string будут содержать в своем интерфейсе два дополнительных метода.

Однако возникает вопрос, что будет, если мы напишем так:

string value = null;
value.IsNullOrEmpty();

Оказывается метод вернет true. Хотя, например, такой код:

string value = null;
var length = value.Length;

вызовет исключение NullReferenceException.

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

Единственный недостаток такого подхода: необходимо везде подлючать пространство имен в котором находиться класс StringExtensions.

Метод Foo(string value) преобразуется в:

public void Foo(string value) {
        if (value.IsNullOrEmptySpace(value))
                throw new ArgumentNullException();
        // ...
}

2 комментария:

  1. Хм, было:
    if (string.IsNullOrEmpty(value))
    throw new ArgumentNullException();
    Стало:
    if (value.IsNullOrEmptySpace(value))
    throw new ArgumentNullException();

    ИМХО, не большая разница :). Да к тому же StringExtensions подключить нужно будет.

    ОтветитьУдалить
  2. Возможно это подойдет для использования в проектах, где используется .NET Framework версии ниже 4. Метод String.IsNullOrWhiteSpace есть только в четвертой версии. Надо было свой метод тоже назвать IsNullOrWhiteSpace.

    ОтветитьУдалить