根据Microsoft的文档,通过将值类型标记为可为空,我可以将它们与null进行比较。在嵌套对象中使用空传播时,这特别有用。但是,当比较我认为是值类型的特定枚举时,我仍然可以与null进行比较,如下所示:public class NullColorComparer{ public bool CompareNullWithColor() { // This return false. return null == Color.Red; }}public enum Color{ Red, Blue}为什么这样做?编译是否应该因类型错误而失败?
3 回答
慕村225694
TA贡献1880条经验 获得超4个赞
null
比较的一面被视为a Nullable<Program.Color>
,它将进行编译,因为您可以将aNullable<WhatEver>
与a进行比较WhatEver
。
但是,它将发出警告:
警告CS0472表达式的结果始终为'false',因为类型'Program.Color'的值从不等于类型'Program.Color?'的'null'。
www说
TA贡献1775条经验 获得超8个赞
C#编译器不会阻止比较。但是您会得到一个警告:“表达式的结果始终为'false',因为'Color'类型的值永远不会等于'Color'类型的'null'。” 它可以让您进行比较,但表示总是错误的。对于任何值类型都是如此。您甚至可以将Int32
值与null进行比较,您将获得相同的结果。无需编译时错误”
- 3 回答
- 0 关注
- 252 浏览
添加回答
举报
0/150
提交
取消