为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 C# 编译器会为 NULL 和数字比较产生结果?

为什么 C# 编译器会为 NULL 和数字比较产生结果?

C#
收到一只叮咚 2021-06-11 19:34:29
我有以下代码片段,它使 TaskA 在 Employee 对象为 NULL 时运行(预计仅在 Employee ID 不等于 1 时才运行 TaskA)。if (Employee?.Id != 1) <PerformTaskA>;在这里,为什么 C# 编译器比较 NULL 和 1?不应该抛出异常吗?另外,避免此类情况的更好做法是什么?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

当您执行与nullable类型的比较时,如果可空类型之一的值为 null 而另一个不是,则所有比较的计算结果false都为,除了!= (not equal)。重要的是不要假设因为特定的比较返回 false,相反的情况返回 true。在以下示例中,10 不大于、小于或等于 null。只有 num1 != num2 评估为真。


int? num1 = 10;

int? num2 = null;

if (num1 >= num2)

{

    Console.WriteLine("num1 is greater than or equal to num2");

}

else

{

    // This clause is selected, but num1 is not less than num2.

    Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)");

}


if (num1 < num2)

{

    Console.WriteLine("num1 is less than num2");

}

else

{

    // The else clause is selected again, but num1 is not greater than

    // or equal to num2.

    Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)");

}


if (num1 != num2)

{

    // This comparison is true, num1 and num2 are not equal.

    Console.WriteLine("Finally, num1 != num2 returns true!");

}


// Change the value of num1, so that both num1 and num2 are null.

num1 = null;

if (num1 == num2)

{

    // The equality comparison returns true when both operands are null.

    Console.WriteLine("num1 == num2 returns true when the value of each is null");

}

/* 输出:


num1 >= num2 返回 false(但 num1 < num2 也是 false)


num1 < num2 返回 false(但 num1 >= num2 也是 false)


最后, num1 != num2 返回 true!


num1 == num2 当每个值都为空时返回真


*/


检查此 Microsoft文档

此处查看Live Fiddle


查看完整回答
反对 回复 2021-06-20
  • 3 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信