Разница между 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
метод интерпретирует любой символ, который возвращает a значение true, когда оно перешло кChar.IsWhiteSpace
метод пробельный символ.
первый метод проверяет, является ли строка нулевой или пустой строкой. В вашем примере вы можете рискнуть нулевой ссылкой, так как вы не проверяете null перед обрезкой
1- string.IsNullOrEmpty(text.Trim())
второй метод проверяет, если строка является нулем или произвольное количество пробелов в строке (включая пустую строку)
2- string .IsNullOrWhiteSpace(text)
метод
IsNullOrWhiteSpace
крышкиIsNullOrEmpty
, но он также возвращаетtrue
если строка содержит пробелы.в вашем конкретном примере вы должны используйте 2) при запуске риска исключения нулевой ссылки в подходе 1) так как вы вызываете trim на строку, которая может быть null
пробел
, 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
Также см. Этот ответ про: пробельные символы
String.IsNullOrEmpty(string value)
возвращаетtrue
если строка имеет значение null или пуста. Для справки пустая строка представлена символом "" (два символа двойной кавычки)
String.IsNullOrWhitespace(string value)
возвращаетtrue
если строка имеет значение null, пуста или содержит только пробелы, такие как пробел или табуляция.чтобы узнать, какие символы считаются пробелами, обратитесь к этой ссылке: http://msdn.microsoft.com/en-us/library/t809ektx.aspx
если ваша строка (в вашем случае переменная
text
) может быть null, это будет иметь большое значение:1-
string.IsNullOrEmpty(text.Trim())
-- > исключение С момента вашего вызова mthode объекта null2-
string.IsNullOrWhiteSpace(text)
Это будет работать нормально, так как нулевая проблема проверяется внутреннечтобы обеспечить такое же поведение, используя 1-й вариант, вам нужно будет как-то проверить, если он не равен нулю, а затем использовать метод trim ()
if ((text != null) && string.IsNullOrEmpty(text.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
строку.isNullOrWhiteSpace(текст) следует использовать в большинстве случаев как Он также включает в себя пустые строки.
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)); } } }
возвращает правда!
[тест производительности] на всякий случай, если кому-то интересно, в тесте секундомера сравнения
if(nopass.Отделка.)(Длина > 0)
Если (!строка.IsNullOrWhiteSpace(nopass))
вот результаты:
Trim-Length с пустым значением = 15
Trim-Длина с не пустым значением = 52
IsNullOrWhiteSpace с пустым значением = 11
IsNullOrWhiteSpace с не пустым значением = 12