Обработка нулевой/пустой строки

До выхода .NET 4 мы делали что-то подобное для проверки нулевой/пустой строки:

String s;
if ((s + "").Trim().Length == 0)
{
    //do something
}

Хотя приведенный выше метод работает довольно хорошо для нас, я знаю, что в .NET 4 у нас есть метод IsNullOrWhiteSpace, чтобы делать то же самое.

У меня вопрос, какой из них лучше? Должны ли мы вместо этого переключиться на использование встроенной функции?


person andri    schedule 17.03.2013    source источник


Ответы (3)


В .NET 4 я бы определенно использовал встроенный метод. В конце концов, в нем точно указано, что вы пытаетесь сделать.

Если вы застряли до .NET 4, почему бы не использовать:

if (s == null || s.Trim() == "")

Or

if (s == null || s.Trim().Length == 0)

? Оба они говорят, чего вы хотите достичь.

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

person Jon Skeet    schedule 17.03.2013
comment
Что не так с конкатенацией строк? Это действительно настолько плохо? - person andri; 17.03.2013
comment
@andri: Это нормально, если вы хотите объединить строки. Но это не так. Вы только используете конкатенацию, чтобы избежать обработки нулевых ссылок. Это не хорошо. - person Jon Skeet; 17.03.2013
comment
Думаю, я понял вашу точку зрения. Но в некоторых случаях нам также необходимо обработать строку Trimmed (и превратить их в пустую строку, если это null). Является ли конкатенация, чтобы избежать null, все еще плохой идеей для этого случая? - person andri; 18.03.2013
comment
Забудьте мой предыдущий комментарий, я нашел ответ здесь: stackoverflow.com/questions/416473/ - person andri; 18.03.2013

Лично я использую IsNullOrWhiteSpace, в основном потому, что с его помощью код становится более понятным для чтения и он обрабатывает больше случаев (часть WhiteSpace). Это зависит от ваших предпочтений, потому что оба метода делают одно и то же.

person Lemurr    schedule 17.03.2013

Почему бы не написать вспомогательный метод для реализации того, что делает IsNullOrWhiteSpace до .NET 4? Как

public static boolean IsNullOrWhiteSpace(string input)
{
    return string.IsNullOrEmpty(input) || input.Trim() == string.Empty;
}

Не используйте здесь конкатенацию, как сказал Джон. Не рекомендуется проверять значение null/пусто.

person Kirin Yao    schedule 18.03.2013
comment
Да, на самом деле некоторые из нашей реализации используют метод помощника/расширения (а некоторые другие напрямую используют код, подобный приведенному выше примеру :(). - person andri; 18.03.2013
comment
@andri Никогда не поздно и всегда стоит провести рефакторинг. :) - person Kirin Yao; 18.03.2013