When working with .net languages, you may have come across some subtle difference between the languages in terms of how different situations are handled. One of these situations is the If statement. If you want to check an array to make sure it is not nothing and also contains elements, you may be tempted to try something like this:
If Not MyArray is nothing And MyArray.Length > 0 then ' Do Something End If
Or
If MyArray is nothing Or MyArray.Length = 0 then ' Do Something End If
You may expect that the ‘And’ operator and ‘Or’ operator will exit early, but this is not the case. But to handle this specific scenario, there exists the ‘AndAlso’ and ‘OrElse’ operators. To prove that the problem exists and is resolvable – you may try the following code in a basic Console Application Template:
Dim b As Array = Nothing Try If Not b Is Nothing And b.Length = 0 Then Console.WriteLine("Array is nothing") Else Console.WriteLine("Array is Something") End If Catch ex As NullReferenceException Console.WriteLine(ex.Message) End Try Try If b Is Nothing Or b.Length = 0 Then Console.WriteLine("Array is nothing") Else Console.WriteLine("Array is Something") End If Catch ex As NullReferenceException Console.WriteLine(ex.Message) End Try Try If Not b Is Nothing AndAlso b.Length > 0 Then Console.WriteLine("Array is Something") Else Console.WriteLine("Array is nothing or 0") End If Catch ex As NullReferenceException Console.WriteLine(ex.Message) End Try Try If b Is Nothing OrElse b.Length > 0 Then Console.WriteLine("Array is nothing or 0") Else Console.WriteLine("Array is Something") End If Catch ex As NullReferenceException Console.WriteLine(ex.Message) End Try
The output should look something like this:
Object reference not set to an instance of an object.
Object reference not set to an instance of an object.
Array is nothing or 0
Array is nothing or 0
Press any key to continue . . .