Наиболее рекомендуемый способ проверки пустых строк в C # - PullRequest
51 голосов
/ 24 октября 2011

Каков наилучший способ для проверки пустых строк (я не спрашиваю об инициализации! ) в C # при рассмотрении производительности кода ? (См. Кодниже)

string a;

// some code here.......


if(a == string.Empty)

или

if(string.IsNullOrEmpty(a))

или

if(a == "")

любая помощь будет оценена.:)

Ответы [ 7 ]

89 голосов
/ 24 октября 2011

Не сравнивайте строки с String.Empty или "", чтобы проверить наличие пустых строк.

Вместо этого сравните, используя String.Length == 0

Разница между string.Empty и "" очень мала. String.Empty не будет создавать никаких объектов, в то время как "" создаст новый объект в памяти для проверки. Следовательно string.empty лучше в управлении памятью. Но сравнение с string.Length == 0 будет еще быстрее и лучший способ проверить наличие пустой строки.

33 голосов
/ 24 октября 2011

Я думаю, что лучший способ - if(string.IsNullOrEmpty(a)), потому что он быстрее и безопаснее, чем другие методы.

17 голосов
/ 24 октября 2011
string.IsNullOrEmpty(a)

будет проверяться как NULL ||ПУСТО

это реализация:

public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}
2 голосов
/ 24 октября 2011

Создать метод расширения для полной проверки:

public static bool IsEmpty(this string s)
{
  if(s == null) return true;
  return string.IsNullOrEmpty(s.Trim()); // originally only (s)
}

Извините, не хороший код, исправлено. Теперь вам сообщат, пуста ли строка или пуста после обрезки.

2 голосов
/ 24 октября 2011

Вы можете использовать Длина , а также

string input = "";

if (input != null)
{
    if (input.Length == 0)
    {

    }
}  
1 голос
/ 06 сентября 2017

Позднее прибытие:

if a == ""

вызовет предупреждение анализа кода CA1820, поэтому вам определенно не следует этого делать. Полный анализ см. CA1820: проверка пустых строк с использованием длины строки

0 голосов
/ 24 октября 2011

Значение String.Empty будет расшифровано только во время выполнения, но с другой стороны значение "" известно во время самой компиляции.

Это единственная разница между этими двумя.

Но в соответствии с наилучшей практикой, если завтра M $ решит, что пустое строковое значение должно быть использовано как '' вместо "" по какой-то причине, тогда ваш код должен изменяться везде. Так что в этом случае лучше всего использовать String.Empty.

Это та же практика, что и в Path.Combine.

...