Разница между IsNullOrEmpty и IsNullOrWhiteSpace в C#
Каковы различия между этими командами в C#
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
8 ответов
IsNullOrWhiteSpace
это удобный метод, похожий на следующий код, за исключением того, что он обеспечивает превосходную производительность:return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
Пробельные символы определяются стандартом Unicode.
IsNullOrWhiteSpace
Метод интерпретирует любой символ, который возвращает значение true, когда оно передаетсяChar.IsWhiteSpace
метод как символ пробела.
Космос Tab
\t
и новая строка \n
разница
string.IsNullOrWhiteSpace("\t"); //true
string.IsNullOrEmpty("\t"); //false
string.IsNullOrWhiteSpace(" "); //true
string.IsNullOrEmpty(" "); //false
string.IsNullOrWhiteSpace("\n"); //true
string.IsNullOrEmpty("\n"); //false
https://dotnetfiddle.net/4hkpKM
также смотрите этот ответ о: пробельные символы
Первый метод проверяет, является ли строка нулевой или пустой строкой. В вашем примере вы можете рискнуть нулевой ссылкой, так как вы не проверяете на нулевое значение перед обрезкой
1- string.IsNullOrEmpty(text.Trim())
Второй метод проверяет, является ли строка нулевой или произвольным числом пробелов в строке (включая пустую строку)
2- string .IsNullOrWhiteSpace(text)
Метод IsNullOrWhiteSpace
охватывает IsNullOrEmpty
, но это также возвращает true
если строка содержит пробел.
В вашем конкретном примере вы должны использовать 2), поскольку вы рискуете исключить нулевую ссылку в подходе 1), так как вы вызываете trim для строки, которая может быть нулевой
Реальная реализация методов выглядит так.
public static bool IsNullOrEmpty(String value) {
return (value == null || value.Length == 0);
}
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;
}
Поэтому очевидно, что второй метод также проверяет пробелы, а не только длину входной строки. Ссылки на пробелы: https://msdn.microsoft.com/en-us/library/system.char.iswhitespace(v=vs.110).aspx
String.IsNullOrEmpty(string value)
возвращается true
если строка является нулевой или пустой. Для справки пустая строка представлена знаком "" (два символа двойной кавычки)
String.IsNullOrWhitespace(string value)
возвращается true
если строка пустая, пустая или содержит только пробельные символы, такие как пробел или табуляция.
Чтобы узнать, какие символы считаются пробелами, обратитесь к этой ссылке: http://msdn.microsoft.com/en-us/library/t809ektx.aspx
Если ваша строка (В вашем случае переменная text
) может быть нулевым, это будет иметь большое значение:
1-string.IsNullOrEmpty(text.Trim())
-> ИСКЛЮЧЕНИЕ, так как вы вызываете метод нулевого объекта
2-string.IsNullOrWhiteSpace(text)
Это будет работать нормально, так как нулевая проблема проверяется внутри
Чтобы обеспечить такое же поведение с помощью 1-й опции, вам нужно будет как-то проверить, не является ли оно пустым, а затем использовать метод trim().
if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
string.isNullOrWhiteSpace(text) следует использовать в большинстве случаев, так как он также содержит пустую строку.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
var str = "";
Console.WriteLine(string.IsNullOrWhiteSpace(str));
}
}
}
Это возвращает True!
[Тест производительности] на всякий случай, если кто-то задается вопросом, в сравнении секундомер тест
if (nopass.Trim (). Length> 0)
if (! string.IsNullOrWhiteSpace (nopass))
это были результаты:
Trim-Length с пустым значением = 15
Trim-Length с непустым значением = 52
IsNullOrWhiteSpace с пустым значением = 11
IsNullOrWhiteSpace с непустым значением = 12