string.IsNullOrEmpty(string)
Считается ли использование при проверке строки плохой практикой, когда есть string.IsNullOrWhiteSpace(string)
в .NET 4.0 и выше?
Лучшей практикой является выбор наиболее подходящей.
.Net Framework 4.0 Beta 2 имеет новый метод IsNullOrWhiteSpace () для строк, который обобщает метод IsNullOrEmpty (), чтобы также включать другие пробелы помимо пустой строки.
Термин «пробел» включает в себя все символы, которые не видны на экране. Например, пробел, разрыв строки, табуляция и пустая строка являются пробелами * .
Ссылка: здесь
Для производительности IsNullOrWhiteSpace не идеален, но хорош. Вызов метода приведет к небольшому снижению производительности. Кроме того, сам метод IsWhiteSpace имеет некоторые косвенные указания, которые можно удалить, если вы не используете данные Unicode. Как всегда, преждевременная оптимизация может быть злой, но это также весело.
Ссылка: здесь
Проверьте исходный код (ссылка на источник .NET Framework 4.6.2)
[Pure]
public static bool IsNullOrEmpty(String value) {
return (value == null || value.Length == 0);
}
[Pure]
public static bool IsNullOrWhiteSpace(String value) {
if (value == null) return true;
for(int i = 0; i < value.Length; i++) {
if(!Char.IsWhiteSpace(value[i])) return false;
}
return true;
}
Примеры
string nullString = null;
string emptyString = "";
string whitespaceString = " ";
string nonEmptyString = "abc123";
bool result;
result = String.IsNullOrEmpty(nullString); // true
result = String.IsNullOrEmpty(emptyString); // true
result = String.IsNullOrEmpty(whitespaceString); // false
result = String.IsNullOrEmpty(nonEmptyString); // false
result = String.IsNullOrWhiteSpace(nullString); // true
result = String.IsNullOrWhiteSpace(emptyString); // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString); // false
return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
, о котором идет речь , заключается в выделении новой строки и двух отдельных проверках. Скорее всего, внутри IsNullOrWhitespace это делается с помощью одного прохода без каких-либо выделений, проверяя, что каждый символ в строке является пробелом, следовательно, превосходная производительность. Что тебя смущает на самом деле?IsNullOrWhitespace()
будет ли соответствовать пустой строке. По сути,IsNullOrEmpty()
соответствует подмножествуIsNullOrWhitespace()
.Отличия на практике:
источник
Это разные функции. Вы должны решить для своей ситуации, что вам нужно.
Я не считаю использование любого из них плохой практикой. Большей части времени
IsNullOrEmpty()
достаточно. Но у вас есть выбор :)источник
Contains
. Если вы хотите убедиться, что имя пользователя не может состоять только из пробелов -IsNullOrWhiteSpace
это нормально.IsNullOrEmpty
гарантирует, что имя пользователя было введено каким-либо образом.Вот фактическая реализация обоих методов (декомпилированная с использованием dotPeek)
источник
IsNullOrWhiteSpace
что верно и дляstring.Empty
! Это бонус :)Это говорит о том, что все
IsNullOrEmpty()
это не включает интервал белого, в то время какIsNullOrWhiteSpace()
делает!IsNullOrEmpty()
Если строка:-Null
-Empty
IsNullOrWhiteSpace()
Если строка:-Null
-Empty -Содержит
только пробелы
источник
Проверьте это с помощью IsNullOrEmpty и IsNullOrwhiteSpace
Вы увидите, что IsNullOrWhiteSpace намного медленнее: /
источник
string.IsNullOrEmpty (str) - если вы хотите проверить, предоставлено ли строковое значение
string.IsNullOrWhiteSpace (str) - по сути, это уже своего рода реализация бизнес-логики (то есть, почему "" плохая, а что-то вроде "~~" хорошая).
Мой совет - не смешивайте бизнес-логику с техническими проверками. Так, например, string.IsNullOrEmpty лучше всего использовать в начале методов для проверки их входных параметров.
источник
Как насчет того, чтобы поймать всех ...
Это обрезает все пробелы, если они там, избегая снижения производительности IsWhiteSpace, что позволит строке соответствовать «пустому» условию, если оно не равно нулю.
Я также думаю, что это более понятно, и в целом это хорошая практика - обрезать строки в любом случае, особенно если вы помещаете их в базу данных или что-то в этом роде.
источник
В стандарте .Net 2.0:
источник