Разница между 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