Какой лучше среди этих трех?
string myString = "";
String.IsNullOrEmpty(myString);
vs
string myString = "";
if(myString.Length > 0 || myString != null)
vs
string myString = "";
if (m.Length > 0 | m != null)
Прежний более ясно, но там какое-либо различие в производительности среди них? Что, если, в случае, если строка никогда не пуста, как, если взято от Текстового поля, которое могло бы быть пустым, но не пустым?
Ну, версия в вопросе:
if(myString.Length > 0 || myString != null)
будет определенно хуже, так как вы должны проверить на null
first (не второй) - в идеале короткое замыкание на null
, чтобы не пытаться вызвать .Length
. Но обычно я просто использую string.IsNullOrEmpty
. Вы всегда можете написать метод-расширение, чтобы сделать его менее многословным, если хотите (вы можете вызвать методы-расширения по значениям null
).
static bool HasValue(this string s) {
return !string.IsNullOrEmpty(s);
}
Перейти с String.isnulloMempty (STR)
. Это понятнее и более сжато. Это не будет шеи бутылки в вашем приложении.
Если вам нужно только проверить на наличие строки «пустота», то я бы пошел с проверкой String. Пупест
, поскольку он лучше выражает ваш намерение.
Я бы использовал isnullolemempty.
Было бы проще разобраться, когда вы просматриваете код позже.
Вот еще один - слегка причудливый - причина. Некоторые более поздние программисты должны прийти позже, почесать бороду и сказать «Я думаю, что MyString.trim (). Длина! = 0 лучше» и измените его.
Как отметили другие: проверка нулевой секунды - это потенциальная ошибка нуля доступа, ожидающая произошедшего - библиотечная рутина гарантирована в порядке.
Как сказали другие, 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 (то есть нативных).
Я считаю, что строка .isnulloMempty (String S) реализована как:
, если (s == null || s.length == 0) ..
в API.
Использование String.IsNullOrEmpty
является лучшим выбором, если вы не уверены в том, как проверить различные состояния ссылки на строку (а вы, очевидно, уверены, так как получили ее неправильно... ;)).
Использование метода IsNullOrEmpty
:
if (String.IsNullOrEmpty(s)) ...
эквивалентно использованию проверки на нулевую и нулевую длину:
if (s == null || s.Length == 0) ...
Если вы знаете, что ссылка не может быть нулевой, вы можете пропустить эту проверку и просто проверить длину:
if (s.Length == 0) ...
Метод IsNullOrEmpty
также будет работать в обычных ситуациях, но в случае, когда что-то пошло не так и ссылка на самом деле является нулевой, метод IsNullOrEmpty
молча примет ее, в то время как вы обычно хотите, чтобы вам сообщили об ошибке.