I\'m curious if any developers use string.IsNullOrEmpty() more often with a negative than with a positive
e.g.
if (!string.IsNullOrEmpty())
Double negatives are usually discouraged in naming stuff. !string.NotNullOrEmpty(...)
would make one.
I had the same question before I realized all I had to do to flip the question was to put the Not operator in front of the conditional. I think it cleande up my code some.
// need to check if tBx_PTNum.Text is empty
/*
if (string.IsNullOrWhiteSpace(tBx_PTNum.Text))
{
// no pt number yet
}
else
{
ptNum = Convert.ToInt32(tBx_PTNum.Text);
}
*/
if(!string.IsNullOrEmpty(tBx_PTNum.Text))
{
ptNum = Convert.ToInt32(tBx_PTNum.Text);
}
"NotNullOrEmpty" is ambiguous, it could mean "(not null) or empty" or it could mean "not (null or empty)". To make it unambiguous you'd have to use "NotNullAndNotEmpty", which is a mouthfull.
Also, the "IsNullOrEmpty" naming encourages use as a guard clause, which I think is useful. E.g.:
if (String.IsNullOrEmpty(someString))
{
// error handling
return;
}
// do stuff
which I think is generally cleaner than:
if (!String.IsNullOrEmpty(someString))
{
// do stuff
}
else
{
// error handling
return;
}
Because "IsNullOrEmpty" is easier to understand than "NotNullOrEmpty". The latter could be interpreted as:
I would actually be inclined to offer a different answer from the "it's ambiguous" explanation provided by several others (though I agree with that answer as well):
Personally, I like to minimize nesting in my code, as (to me) the more curly braces code has, the harder it becomes to follow.
Therefore I'd much prefer this (for example):
public bool DoSomethingWithString(string s) {
if (string.IsNullOrEmpty(s))
return false;
// here's the important code, not nested
}
to this:
public bool DoSomethingWithString(string s) {
if (!string.IsNullOrEmpty(s)) {
// here's the important code, nested
} else {
return false;
}
}
This is a pretty specific scenario (where a null/empty string prompts an immediate exit) and clearly isn't the way a method using IsNullOrEmpty
would always be structured; but I think it's actually pretty common.
I've always thought it seemed the wrong way round as I use the negative much more often than the positive.
I would also like there to be an instance IsEmpty() or IsNotEmpty() for use when the variable is declared within the function. This could not be IsNullOrEmpty() or IsNotNullOrEmpty() as if the instance was null then you would get a null reference exception.