猿问

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

我有以下代码片段,它使 TaskA 在 Employee 对象为 NULL 时运行(预计仅在 Employee ID 不等于 1 时才运行 TaskA)。

if (Employee?.Id != 1) <PerformTaskA>;

在这里,为什么 C# 编译器比较 NULL 和 1?不应该抛出异常吗?另外,避免此类情况的更好做法是什么?


收到一只叮咚
浏览 192回答 3
3回答

ibeautiful

当您执行与nullable类型的比较时,如果可空类型之一的值为 null 而另一个不是,则所有比较的计算结果false都为,除了!= (not equal)。重要的是不要假设因为特定的比较返回 false,相反的情况返回 true。在以下示例中,10 不大于、小于或等于 null。只有 num1 != num2 评估为真。int? num1 = 10;int? num2 = null;if (num1 >= num2){&nbsp; &nbsp; Console.WriteLine("num1 is greater than or equal to num2");}else{&nbsp; &nbsp; // This clause is selected, but num1 is not less than num2.&nbsp; &nbsp; Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)");}if (num1 < num2){&nbsp; &nbsp; Console.WriteLine("num1 is less than num2");}else{&nbsp; &nbsp; // The else clause is selected again, but num1 is not greater than&nbsp; &nbsp; // or equal to num2.&nbsp; &nbsp; Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)");}if (num1 != num2){&nbsp; &nbsp; // This comparison is true, num1 and num2 are not equal.&nbsp; &nbsp; 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){&nbsp; &nbsp; // The equality comparison returns true when both operands are null.&nbsp; &nbsp; 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。
随时随地看视频慕课网APP
我要回答