if(model.Building.Address == null)不工作,不编译 - 为什么?

时间:2016-09-21 14:35:21

标签: c#

我得到了一行无法编译的代码,红色下划线:

enter image description here

但是,如果我使用model.Building.Address.Equals(null),则没有问题:

enter image description here

实际的错误消息是:

enter image description here

而Address是一个定义如下的常规属性:

enter image description here

enter image description here

问题:为什么检查(model.Building.Address == null)无法编译???

2 个答案:

答案 0 :(得分:8)

null的比较可能不起作用的原因是model.Building.Address是不可为空的值类型,即struct。此类值类型不能为null,因此编译器会发出错误。

比较model.Building.Address.Equals(null)将编译,但它完全没有比较,因为它总是返回false

使其发挥作用的两种方法是将Address中使用的类型从struct更改为class,或通过附加问号Address使?成为可空的在其类型名称之后。

答案 1 :(得分:1)

如果model.Building.Address == null没有编译,那么确定' sa结构(我的意思是Address是非可空类型而实际上是struct