Reputation:
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
Reputation: 79
.ToString() method help you the same
public int? Age;
if (!string.IsNullOrEmpty(Age.ToString()))
{
// do something
}
Upvotes: 0
Reputation: 3331
As of 2022 you can do it like this:
public int? Age;
if (Age is == 0)
{
// do something
}
Upvotes: 0
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
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
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
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
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
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