在c#中检查整数值为Null

45 .net c#

我有一个整数值,我需要检查它是否为NULL.我使用null-coalescing运算符得到它

C#:

public int? Age;

if ((Age ?? 0)==0)
{
   // do somethig
}
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*rth 108

Nullable<T>(或?)公开一个HasValue标志来表示是否设置了值或该项是否为空.

此外,可空类型支持==:

if (Age == null)

??是空合并运算符,不会导致布尔表达式,但返回值:

int i = Age ?? 0;
Run Code Online (Sandbox Code Playgroud)

所以对于你的例子:

if (age == null || age == 0)
Run Code Online (Sandbox Code Playgroud)

要么:

if (age.GetValueOrDefault(0) == 0)
Run Code Online (Sandbox Code Playgroud)

要么:

if ((age ?? 0) == 0)
Run Code Online (Sandbox Code Playgroud)

或者三元:

int i = age.HasValue ? age.Value : 0;
Run Code Online (Sandbox Code Playgroud)

  • 好答案; 但事实是:无参数的`age.GetValueOrDefault()`稍快一点 - 它*完全绕过*"我有一个值"检查,并且只返回值字段 - 它将默认为`default(T) `,又名'0`. (11认同)

Ode*_*ded 14

几件事:

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

??null coalesce运算符,而不是三元运算符(实际上称为条件运算符).

要检查可空类型是否具有值使用HasValue,或直接检查null:

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

if(Age == null)
{
   // It is null :(
}
Run Code Online (Sandbox Code Playgroud)