user1512559
user1512559

Reputation:

Check an integer value is Null in c#

I have got an integer value and i need to check if it is NULL or not. I got it using a null-coalescing operator

C#:

public int? Age;

if ((Age ?? 0)==0)
{
   // do somethig
}

Now i have to check in a older application where the declaration part is not in ternary. So, how to achieve this without the null-coalescing operator.

Upvotes: 67

Views: 351202

Answers (8)

Sathish
Sathish

Reputation: 79

.ToString() method help you the same

public int? Age;

if (!string.IsNullOrEmpty(Age.ToString()))
{
// do something
}

Upvotes: 0

Alexei Sosin
Alexei Sosin

Reputation: 3331

As of 2022 you can do it like this:

public int? Age;

if (Age is == 0)
{
   // do something
}

Upvotes: 0

fbarikzehy
fbarikzehy

Reputation: 5405

Simply you can do this:

    public void CheckNull(int? item)
    {
        if (item != null)
        {
            //Do Something
        }

    }

Since C# version 9 you can do this:

  public void CheckNull(int? item)
  {
    if (!(item is null))
    {
        //Do Something
    }

  }

Or more readable:

  public void CheckNull(int? item)
  {
    if (item is not null)
    {
        //Do Something
    }

  }

Upvotes: 4

MSD561
MSD561

Reputation: 512

Because int is a ValueType then you can use the following code:

if(Age == default(int) || Age == null)

or

if(Age.HasValue && Age != 0) or if (!Age.HasValue || Age == 0)

Upvotes: 2

Jodrell
Jodrell

Reputation: 35716

As stated above, ?? is the null coalescing operator. So the equivalent to

(Age ?? 0) == 0

without using the ?? operator is

(!Age.HasValue) || Age == 0

However, there is no version of .Net that has Nullable< T > but not ??, so your statement,

Now i have to check in a older application where the declaration part is not in ternary.

is doubly invalid.

Upvotes: 1

Adam Houldsworth
Adam Houldsworth

Reputation: 64487

Nullable<T> (or ?) exposes a HasValue flag to denote if a value is set or the item is null.

Also, nullable types support ==:

if (Age == null)

The ?? is the null coalescing operator and doesn't result in a boolean expression, but a value returned:

int i = Age ?? 0;

So for your example:

if (age == null || age == 0)

Or:

if (age.GetValueOrDefault(0) == 0)

Or:

if ((age ?? 0) == 0)

Or ternary:

int i = age.HasValue ? age.Value : 0;

Upvotes: 144

Smileek
Smileek

Reputation: 2782

There is already a correct answer from Adam, but you have another option to refactor your code:

if (Age.GetValueOrDefault() == 0)
{
    // it's null or 0
}

Upvotes: 2

Oded
Oded

Reputation: 499002

Several things:

Age is not an integer - it is a nullable integer type. They are not the same. See the documentation for Nullable<T> on MSDN for details.

?? is the null coalesce operator, not the ternary operator (actually called the conditional operator).

To check if a nullable type has a value use HasValue, or check directly against null:

if(Age.HasValue)
{
   // Yay, it does!
}

if(Age == null)
{
   // It is null :(
}

Upvotes: 18

Related Questions