ryanba29 Ответов: 1

Что является хорошей альтернативой использованию "! - в сравнительном заявлении?


Недавно я просматривал какой-то код, который написал несколько месяцев назад, и потратил впустую время, потому что пропустил"!", предшествующее сравнению, как показано ниже
if(!string.IsNullOrWhiteSpace(parm)){// Do some stuff...
}

Я не знаю, считается ли это плохой практикой, но ее демонстративно легко пропустить, так что же является хорошей альтернативой?

Что я уже пробовал:

if(!string.IsNullOrWhiteSpace(parm)){// Do some stuff...
}

if(string.IsNullOrWhiteSpace(parm) != true){
// Do some stuff...
// Best solution so far, but
// seems like the coding equivalent of a double negative.
// ie. "!= true", should just be "false".
}

if(!string.IsNullOrWhiteSpace(parm)){// Do nothing but waist space and bytes}
else{// Do some stuff..
}


Для собственного развлечения я хотел бы отметить, что даже текстовый процессор Code Project пропускает его интерпретаторы.
!string.IsNullOrWhiteSpace(parm)

должно выглядеть так без пробелов
! string.IsNullOrWhiteSpace(parm)

Richard Deeming

Ну, вы могли бы заменить != true с == false чтобы избавиться от двойного негатива.

Также посмотрите на свои настройки белого пространства-оно может быть более четким с пробелом между ними. if и (, и, возможно, пробелы внутри скобок:

if ( !string.IsNullOrWhiteSpace(param) ) {

ryanba29

Даже если он не чище, чем "!= true", он избавляется от двойного негатива. Для меня это улучшение, и я приму это как ответ, если ничего лучшего не будет предоставлено. Спасибо.

1 Ответов

Рейтинг:
7

Wendelius

Лично я бы использовал вариацию @RichardDeeming, написанную в комментарии, но просто чтобы немного поиграть, вы также можете использовать метод расширения. Рассмотреть следующее:

public static class X {
   public static bool IsNotNullOrWhiteSpaceOrSomeOtherDescriptiveName(this string value) {
      return !string.IsNullOrWhiteSpace(value);
   }
}

Теперь вы можете использовать это в своем коде
string a = "";
string b = "a";

if (a.IsNotNullOrWhiteSpaceOrSomeOtherDescriptiveName()) {
   System.Diagnostics.Trace.WriteLine("a contains something meaningful");
}
if (b.IsNotNullOrWhiteSpaceOrSomeOtherDescriptiveName()) {
   System.Diagnostics.Trace.WriteLine("b contains something meaningful");
}

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


ryanba29

Это как раз то, что я ищу. Добавить метод расширения, чтобы расширить класс String. Я использовал bool IsValidString (this string _string){return (string.IsNullOrWhiteSpace(_string) = = false);}. Это правда, что есть некоторая дополнительная сложность, но компромисс заключается в дополнительной читабельности. Учитывая, сколько я использую (! string.IsNullOrWhiteSpace()) Я счастлив. Спасибо.

Wendelius

Рад быть полезным :)