Разница между IsNullOrEmpty и IsNullOrWhiteSpace в C# [дубликат]


этот вопрос уже есть ответ здесь:

каковы различия между этими командами в C#

string text= "  ";
1-string.IsNullOrEmpty(text.Trim())

2-string.IsNullOrWhiteSpace(text)
8 84

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 объекта null

2-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