我有一个整数值,我需要检查它是否为NULL。我使用空合并运算符
得到它C#:
public int? Age;
if ((Age ?? 0)==0)
{
// do somethig
}
现在我必须检查声明部分不在三元组的旧应用程序。那么,如何在没有null合并运算符的情况下实现这一点。
答案 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)