在c#中检查整数值为Null

时间:2012-09-21 09:45:48

标签: c# .net

我有一个整数值,我需要检查它是否为NULL。我使用空合并运算符

得到它

C#:

public int? Age;

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

现在我必须检查声明部分不在三元组的旧应用程序。那么,如何在没有null合并运算符的情况下实现这一点。

6 个答案:

答案 0 :(得分:98)

Nullable<T>(或?)公开HasValue标志,表示是否设置了值或项是否为空。

此外,可空类型支持==

if (Age == null)

??是空合并运算符,不会产生布尔表达式,但会返回一个值:

int i = Age ?? 0;

所以对你的例子来说:

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

或者:

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

或者:

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

或三元:

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

答案 1 :(得分:13)

有几件事:

Age不是整数 - 它是可空整数类型。他们不一样。有关详细信息,请参阅MSDN上Nullable<T>的文档。

??null coalesce operator,而不是三元运算符(实际上称为conditional operator)。

要检查可空类型的值是否为HasValue,或直接针对null进行检查:

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

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

答案 2 :(得分:2)

Adam已经有了正确的答案,但您还有另一种方法可以重构您的代码:

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

答案 3 :(得分:2)

只需你可以这样做:

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

    }

答案 4 :(得分:1)

如上所述,??是空合并运算符。所以相当于

(Age ?? 0) == 0

不使用??运算符

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

但是,.Net的版本没有Nullable< T >但没有??,所以你的陈述,

  

现在我必须检查声明部分不在三元组的旧应用程序。

双重无效。

答案 5 :(得分:1)

因为 int 是一个ValueType,所以您可以使用以下代码:

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