Строка. IsNullOrEmpty (myString) По сравнению с myString! = пустой указатель

Какой лучше среди этих трех?

string myString = ""; 
String.IsNullOrEmpty(myString);

vs

string myString = "";
if(myString.Length > 0 || myString != null)

vs 

string myString = "";
if (m.Length > 0 | m != null)

Прежний более ясно, но там какое-либо различие в производительности среди них? Что, если, в случае, если строка никогда не пуста, как, если взято от Текстового поля, которое могло бы быть пустым, но не пустым?

6
задан AndrewC 19 September 2012 в 20:02
поделиться

6 ответов

Ну, версия в вопросе:

if(myString.Length > 0 || myString != null)

будет определенно хуже, так как вы должны проверить на null first (не второй) - в идеале короткое замыкание на null, чтобы не пытаться вызвать .Length. Но обычно я просто использую string.IsNullOrEmpty. Вы всегда можете написать метод-расширение, чтобы сделать его менее многословным, если хотите (вы можете вызвать методы-расширения по значениям null).

static bool HasValue(this string s) {
    return !string.IsNullOrEmpty(s);
}
18
ответ дан 8 December 2019 в 04:29
поделиться

Перейти с String.isnulloMempty (STR) . Это понятнее и более сжато. Это не будет шеи бутылки в вашем приложении.

Если вам нужно только проверить на наличие строки «пустота», то я бы пошел с проверкой String. Пупест , поскольку он лучше выражает ваш намерение.

4
ответ дан 8 December 2019 в 04:29
поделиться

Я бы использовал isnullolemempty.

Было бы проще разобраться, когда вы просматриваете код позже.

Вот еще один - слегка причудливый - причина. Некоторые более поздние программисты должны прийти позже, почесать бороду и сказать «Я думаю, что MyString.trim (). Длина! = 0 лучше» и измените его.

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

2
ответ дан 8 December 2019 в 04:29
поделиться

Как сказали другие, isnulloMempty () превосходит руководства для механических проверок в целях ремонтопригодности и вряд ли пострадает от выполнения решения во время выполнения JIT Compiler о встроении (см. Комментарии Эрика Гуннизма ).

Если кто-то еще задается вопросом, как выглядит реальная реализация .NET, вот код .NET 4:

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

Этот атрибут указывает, что метод также будет включен в изображениях NGEN (то есть нативных).

2
ответ дан 8 December 2019 в 04:29
поделиться

Я считаю, что строка .isnulloMempty (String S) реализована как:

, если (s == null || s.length == 0) ..

в API.

0
ответ дан 8 December 2019 в 04:29
поделиться

Использование String.IsNullOrEmpty является лучшим выбором, если вы не уверены в том, как проверить различные состояния ссылки на строку (а вы, очевидно, уверены, так как получили ее неправильно... ;)).

Использование метода IsNullOrEmpty:

if (String.IsNullOrEmpty(s)) ...

эквивалентно использованию проверки на нулевую и нулевую длину:

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

Если вы знаете, что ссылка не может быть нулевой, вы можете пропустить эту проверку и просто проверить длину:

if (s.Length == 0) ...

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

1
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: