Refactorings that work with strings – Use IsNullOrEmpty

November 25th, 2011

When checking that a user has provided a valid input, you will often want to ensure that it is not null or empty. Strings are reference types and can be equal to a null value like any other reference type. Strings can also be empty, meaning their values equal “” and they have zero length. The IsNullOrEmpty call of the System.String class indicates whether the given string is a null or an empty (“”) string. Before this call appeared in the .NET Framework, we were checking strings as follows (for example):

This code checks the userName, password and domainName strings that are null and uses different checks for the string contents. All these checks can be replaced with the corresponding IsNullOrEmpty call in by applying the Use IsNullOrEmptyrefactoring. The Use IsNullOrEmpty refactoring shipped in DevExpress Refactor! Pro allows you to convert the string checking code into the appropriate call in a single step:

The result produced is now much more readable:

If you don’t want to replace all checks, you can select those to be converted:

Only selected checks will be replaced by the refactoring:

The refactoring requires both checks (for null and empty) to occur at once. Strings can be either equal to the null literal, meaning they don’t reference any data, or empty, meaning they reference a character buffer that is zero characters long. IsNullOrEmpty call detects both of these conditions at the same time.

However, this refactoring also has a second version that does not require thes both conditions simultaneously. This version is implemented as a code provider operation which may change the program behavior. The Use IsNullOrEmpty code provider allows you to replace one of the checks to the String.IsNullOrEmpty call:

Use this code provider when you are sure that you need both checks made for a string, otherwise it may change the logic of the code – e.g. when you cannot have a null string value, but you can have an empty string value.