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,则此代码只会引发异常,否则会比较该值。