我有一个整数值,我需要检查它是否为 NULL。我使用空合并运算符得到它
C#:
public int? Age;
if ((Age ?? 0)==0)
{
// do somethig
}
现在我必须检查一个较旧的应用程序,其中声明部分不是三元的。那么,如何在没有空合并运算符的情况下实现这一点。
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;
几件事:
Age
不是整数 - 它是可为空的整数类型。它们是不相同的。有关详细信息,请参阅Nullable<T>
MSDN 上的文档。
??
是空合并运算符,而不是三元运算符(实际上称为条件运算符)。
要检查可空类型是否有值,请使用HasValue
,或直接检查null
:
if(Age.HasValue)
{
// Yay, it does!
}
if(Age == null)
{
// It is null :(
}
只需您可以这样做:
public void CheckNull(int? item)
{
if (item != null)
{
//Do Something
}
}
从 C# 版本 9 开始,您可以这样做:
public void CheckNull(int? item)
{
if (!(item is null))
{
//Do Something
}
}
或者更具可读性:
public void CheckNull(int? item)
{
if (item is not null)
{
//Do Something
}
}
Adam 已经给出了正确的答案,但是您还有另一种选择来重构您的代码:
if (Age.GetValueOrDefault() == 0)
{
// it's null or 0
}
如上所述,??
是空合并运算符。所以相当于
(Age ?? 0) == 0
不使用??
运算符是
(!Age.HasValue) || Age == 0
但是,没有任何版本的 .Net 具有Nullable< T >但不是??
,所以你的声明,
现在我必须检查一个较旧的应用程序,其中声明部分不是三元的。
是双重无效的。
因为int是一个 ValueType 那么您可以使用以下代码:
if(Age == default(int) || Age == null)
或者
if(Age.HasValue && Age != 0) or if (!Age.HasValue || Age == 0)