Разница между IsNullOrEmpty и IsNullOrWhiteSpace в C# [дубликат]
этот вопрос уже есть ответ здесь:
- строку.IsNullOrEmpty(строка) и строка.IsNullOrWhiteSpace (string) 8 ответов
каковы различия между этими командами в 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
метод как a пробельный символ.
первый метод проверяет, является ли строка null или пустой строкой. В вашем примере вы можете рискнуть нулевой ссылкой, так как вы не проверяете значение null перед обрезкой
1- string.IsNullOrEmpty(text.Trim())
второй метод проверяет, является ли строка нулевой или произвольным числом пробелов в строке (включая пустую строку)
2- string .IsNullOrWhiteSpace(text)
метод IsNullOrWhiteSpace
крышки IsNullOrEmpty
, но он также возвращает true
если строка содержит пробелы.
в вашем конкретном примере вы должны используйте 2), поскольку вы рискуете исключением нулевой ссылки в подходе 1), так как вы вызываете trim в строке, которая может быть null
пробел , Tab
\t
и newline \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 нулевого объекта
2-string.IsNullOrWhiteSpace(text)
Это будет работать нормально, так как нулевая проблема проверяется внутренне
чтобы обеспечить такое же поведение, используя 1-й вариант, вам нужно будет как-то проверить, если его не null, а затем использовать метод 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 (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.Отделка.)(Длина > 0)
if (!строка.IsNullOrWhiteSpace(nopass))
вот результаты:
Trim-Длина с пустым значением = 15
Trim-Длина с не пустым значением = 52
IsNullOrWhiteSpace с пустым значением = 11
IsNullOrWhiteSpace с не пустым значением = 12