string.IsNullOrEmpty (string) против string.IsNullOrWhiteSpace (string) - PullRequest
193 голосов
/ 08 августа 2011

Является ли использование string.IsNullOrEmpty(string) при проверке строки плохой практикой при наличии string.IsNullOrWhiteSpace(string) в .NET 4.0 и более поздних версиях?

Ответы [ 9 ]

307 голосов
/ 08 августа 2011

Лучшей практикой является выбор наиболее подходящей.

.Net Framework 4.0 Beta 2 имеет новый метод IsNullOrWhiteSpace () для строки, которые обобщают метод IsNullOrEmpty (), чтобы также включать другие белые пробел кроме пустой строки.

Термин «пробел» включает в себя все символы, которые не видны на экран. Например, пробел, разрыв строки, табуляция и пустая строка белого цвета пробелы *.

Ссылка: Здесь

Для производительности IsNullOrWhiteSpace не идеален, но хорошо. Вызов метода приведет к небольшому снижению производительности. Кроме того, сам метод IsWhiteSpace имеет некоторые косвенные быть удален, если вы не используете данные Unicode. Как всегда, преждевременно оптимизация может быть злой, но это также весело.

Ссылка: Здесь

Проверка исходного кода (Справочный источник .NET Framework 4.6.2)

IsNullorEmpty

[Pure]
public static bool IsNullOrEmpty(String value) {
    return (value == null || value.Length == 0);
}

IsNullOrWhiteSpace

[Pure]
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;
}

Примеры

string nullString = null;
string emptyString = "";
string whitespaceString = "    ";
string nonEmptyString = "abc123";

bool result;

result = String.IsNullOrEmpty(nullString);            // true
result = String.IsNullOrEmpty(emptyString);           // true
result = String.IsNullOrEmpty(whitespaceString);      // false
result = String.IsNullOrEmpty(nonEmptyString);        // false

result = String.IsNullOrWhiteSpace(nullString);       // true
result = String.IsNullOrWhiteSpace(emptyString);      // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString);   // false
150 голосов
/ 21 июня 2012

Отличия на практике:

string testString = "";
Console.WriteLine(string.Format("IsNullOrEmpty : {0}", string.IsNullOrEmpty(testString)));
Console.WriteLine(string.Format("IsNullOrWhiteSpace : {0}", string.IsNullOrWhiteSpace(testString)));
Console.ReadKey();

Result :
IsNullOrEmpty : True
IsNullOrWhiteSpace : True

**************************************************************
string testString = " MDS   ";

IsNullOrEmpty : False
IsNullOrWhiteSpace : False

**************************************************************
string testString = "   ";

IsNullOrEmpty : False
IsNullOrWhiteSpace : True

**************************************************************
string testString = string.Empty;

IsNullOrEmpty : True
IsNullOrWhiteSpace : True

**************************************************************
string testString = null;

IsNullOrEmpty : True
IsNullOrWhiteSpace : True
37 голосов
/ 08 августа 2011

Это разные функции.Вы должны решить для своей ситуации, что вам нужно.

Я не считаю использование любого из них плохой практикой.Большую часть времени IsNullOrEmpty() достаточно.Но у вас есть выбор:)

28 голосов
/ 17 февраля 2012

Вот фактическая реализация обоих методов (декомпилированная с использованием dotPeek)

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
    public static bool IsNullOrEmpty(string value)
    {
      if (value != null)
        return value.Length == 0;
      else
        return true;
    }

    /// <summary>
    /// Indicates whether a specified string is null, empty, or consists only of white-space characters.
    /// </summary>
    /// 
    /// <returns>
    /// true if the <paramref name="value"/> parameter is null or <see cref="F:System.String.Empty"/>, or if <paramref name="value"/> consists exclusively of white-space characters.
    /// </returns>
    /// <param name="value">The string to test.</param>
    public static bool IsNullOrWhiteSpace(string value)
    {
      if (value == null)
        return true;
      for (int index = 0; index < value.Length; ++index)
      {
        if (!char.IsWhiteSpace(value[index]))
          return false;
      }
      return true;
    }
6 голосов
/ 11 октября 2013

Это говорит обо всем IsNullOrEmpty() не включает интервал белого, в то время как IsNullOrWhiteSpace() делает!

IsNullOrEmpty() Если строка:
-Null
-Empty

IsNullOrWhiteSpace() Если строка:
-Нульный
-Пустой
-Содержит только пробелы

3 голосов
/ 11 ноября 2011

Как насчет того, чтобы поймать всех ...

if (string.IsNullOrEmpty(x.Trim())
{
}

Это обрежет все пробелы, если они там, избегая снижения производительности IsWhiteSpace, что позволит строке соответствовать «пустому» условию, если оно не равно нулю.

Я также думаю, что это яснее и, как правило, рекомендуется в любом случае обрезать строки, особенно если вы помещаете их в базу данных или что-то в этом роде.

2 голосов
/ 28 октября 2014

Проверьте это с помощью IsNullOrEmpty и IsNullOrwhiteSpace

string sTestes = "I like sweat peaches";
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();
    for (int i = 0; i < 5000000; i++)
    {
        for (int z = 0; z < 500; z++)
        {
            var x = string.IsNullOrEmpty(sTestes);// OR string.IsNullOrWhiteSpace
        }
    }

    stopWatch.Stop();
    // Get the elapsed time as a TimeSpan value.
    TimeSpan ts = stopWatch.Elapsed;
    // Format and display the TimeSpan value. 
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 10);
    Console.WriteLine("RunTime " + elapsedTime);
    Console.ReadLine();

Вы увидите, что IsNullOrWhiteSpace намного медленнее: /

1 голос
/ 05 октября 2018

string.IsNullOrEmpty (str) - если вы хотите проверить, предоставлено ли строковое значение

string.IsNullOrWhiteSpace (str) - в основном это уже своего рода реализация бизнес-логики (т.е. почему ""это плохо, но что-то вроде "~~" это хорошо).

Мой совет - не смешивайте бизнес-логику с техническими проверками.Так, например, string.IsNullOrEmpty лучше всего использовать в начале методов для проверки их входных параметров.

0 голосов
/ 29 марта 2019

В стандарте .Net 2.0:

string.IsNullOrEmpty(): указывает, является ли указанная строка пустой или пустой.

Console.WriteLine(string.IsNullOrEmpty(null));           // True
Console.WriteLine(string.IsNullOrEmpty(""));             // True
Console.WriteLine(string.IsNullOrEmpty(" "));            // False
Console.WriteLine(string.IsNullOrEmpty("  "));           // False

string.IsNullOrWhiteSpace(): указывает, является ли указанная строка нулевой, пустой или состоит только из символов пробела.

Console.WriteLine(string.IsNullOrWhiteSpace(null));     // True
Console.WriteLine(string.IsNullOrWhiteSpace(""));       // True
Console.WriteLine(string.IsNullOrWhiteSpace(" "));      // True
Console.WriteLine(string.IsNullOrWhiteSpace("  "));     // True
...