Часто экземпляры класса 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();
// ...
}
Хм, было:
ОтветитьУдалитьif (string.IsNullOrEmpty(value))
throw new ArgumentNullException();
Стало:
if (value.IsNullOrEmptySpace(value))
throw new ArgumentNullException();
ИМХО, не большая разница :). Да к тому же StringExtensions подключить нужно будет.
Возможно это подойдет для использования в проектах, где используется .NET Framework версии ниже 4. Метод String.IsNullOrWhiteSpace есть только в четвертой версии. Надо было свой метод тоже назвать IsNullOrWhiteSpace.
ОтветитьУдалить