"Not ... Is Nothing" versus "... IsNot Nothing"

93,956

Solution 1

The

If Not var1 Is Nothing Then

Is a hangover from VB6. There didn't used to be an IsNot, and so this was the only way to determine if a variable was not Nothing. It seems to be redundant in VB.NET.

Solution 2

foo IsNot Nothing

The following line is straight from Microsoft's Visual Basic Coding Conventions:

Use the IsNot keyword instead of Not...Is Nothing.

Solution 3

I would go with the first variant - it reads like English and is easier to follow/understand than the second one. Other than that, they are equivalent.

Solution 4

I found a similar question here VB.NET - IsNothing versus Is Nothing, where I feel this question was exhaustively answered. Among the answers Jack Snipes identified http://weblogs.asp.net/psteele/410336, a blog that gives some extra detail. From those I prefer and have used

IsNot Nothing

which also makes my code easier to read and understand.

Share:
93,956
nnnn
Author by

nnnn

I am Programmer. I am Buddhist,I love art & my friend. My super power is sleeping. =)

Updated on July 09, 2022

Comments

  • nnnn
    nnnn almost 2 years

    Does anyone here use VB.NET and have a strong preference for or against using Not foo Is Nothing as opposed to foo IsNot Nothing? If so, why?

    For Example

    If var1 IsNot Nothing Then
    ...
    End If
    

    and

    If Not var1 Is Nothing Then
    ...
    End If
    

    I just want to know which one is better?
    Are they both equally acceptable?

  • Tim Schmelter
    Tim Schmelter about 10 years
    IsNot is a newer operator that didn't exist in pre .NET2 versions.
  • EKW
    EKW over 8 years
    "Not...Is Nothing" is not the same thing as "Not IsNothing(...)" Not outright wrong, but not an answer for this question.
  • Breeze
    Breeze almost 8 years
    "If var1 IsNot Nothing Then generates a Compile error" of course it does, when there is no statement or block afterwards. var1 IsNot Nothing itself will work. You also fail to show what Not var1 Is Nothing does, so you don't really answer the question. And please fix your formatting
  • Syroot
    Syroot over 7 years
    I wonder if it's actually faster or compiles to the same. I mean, Not x Is Nothing first does a check for type equality, then negates it. x IsNot Nothing does only a check for type unequality which the runtime might be capable of doing faster (dumbly imaginable as if it checks a type field by field and can leave by the first non-matching one rather than going through each field to check for equality - on top just to negate the result eventually).