C# 比较可为空的整数

C# 比较可为空的整数,c#,C#,在很多地方,我通过应用程序看到过这样的东西: (int)f.Status == something.Status 而此状态属性是: public int? Status { get; set; } 我试图实现的是比较可为null的ints(int?),以便只有当它们都有一个值且值相同时,它们才相等。特别是,如果它们都是null,我希望它们被标识为不相等 最好的方法是什么?此代码有风险,如果f.Status为空,它会给您NullReferenceException 在强制转换为整数之前,可以首

在很多地方,我通过应用程序看到过这样的东西:

(int)f.Status == something.Status
而此
状态
属性是:

public int? Status { get; set; }
我试图实现的是比较可为null的
int
s(
int?
),以便只有当它们都有一个值且值相同时,它们才相等。特别是,如果它们都是
null
,我希望它们被标识为相等


最好的方法是什么?

此代码有风险,如果
f.Status
为空,它会给您
NullReferenceException

在强制转换为整数之前,可以首先检查它是否有value->
f.Status.HasValue

您可以这样做以防止异常:

if (f.Status.HasValue && f.Status == something.Status)
{
}
我建议使用:

f.Status == something.Status
假设这两个属性是
int
int?

C#将允许您比较
int
int?
而无需显式转换


对于未来的读者,这个答案是在OP之前写的,明确指出将
null
null
进行比较会返回
false

我建议将条件改写为:

f.Status.HasValue && something.Status.HasValue && f.Status == something.Status
它会阻止你例外

如果任何状态为just和
int
而不是
int?
,则可以省略
HasValue
检查

已经给出的答案建议使用simple
=
,但如果两者都是
null
s,则返回
true
,与建议的相反。你必须决定这是否是你想要的行为

如前所述,它可以简化为

f.Status.HasValue && f.Status == something.Status

如果两个
null
s的结果相同。

这个问题已经得到了回答,但这里有另一种比较可为null值的方法

if ((f.Status ?? 0) == something.Status){
 //enter code here
}

f.Status.HasValue&&f.Status.Value==something.Status
f.Status==something.Status有效吗?我怀疑不需要
int
cast。你可以将一个可为空的int与一个刚刚好的int进行比较。
int?nullint=null;int nonullint=(int)nullint抛出
System.InvalidOperationException:可为null的对象必须有一个值。
。如果
f.Status
为null,则此代码只会引发异常,否则会比较该值。