String.IsNullOrEmpty(строка) vs. string.IsNullOrWhiteSpace(строка)

Используется ли string.IsNullOrEmpty(string) при проверке строки, считающейся плохой практикой, когда в .NET 4.0 и выше есть string.IsNullOrWhiteSpace(string)?

Ответ 1

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

.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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Вот фактическая реализация обоих методов (декомпиляция с помощью 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;
    }

Ответ 5

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

IsNullOrEmpty() Если строка:
-null
-empty

IsNullOrWhiteSpace() Если строка:
-null
-empty
-Содержит только белые пространства

Ответ 6

Как насчет этого уловить все...

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

Это позволит обрезать все пробелы, если они там избегают штрафа за производительность IsWhiteSpace, что позволит строке соответствовать "пустому" условию, если оно не равно null.

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

Ответ 7

Проверьте это с помощью 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 намного медленнее:/