如何在C#及.NET MVC Web服务中对Money字段进行空值检查?
正确检查.NET MVC中Money字段空值的方法
我来帮你搞定这个Money字段空值检查的问题~首先得搞清楚你的Money类型到底是值类型(struct)还是引用类型(class),这直接决定了空值检查的正确方式:
情况1:Money是值类型(结构体)
值类型(比如自定义的struct Money)默认不会为null,它会有一个默认的初始化值(比如金额为0),所以你原来的!= null判断永远会返回true,自然达不到预期效果。
解决办法是把属性改成可空值类型,这样就能支持null了:
// 修改属性定义为可空类型 public Money? Amount { get; set; }
然后检查空值的时候,有两种写法都可行:
// 方法1:使用HasValue判断 if (EntityObject.Amount.HasValue) { Entity.Attributes.Add("budget amount", EntityObject.Amount.Value); } // 方法2:直接判断null(可空类型支持这种写法) if (EntityObject.Amount != null) { Entity.Attributes.Add("budget amount", EntityObject.Amount.Value); }
情况2:Money是引用类型(类)
如果Money是引用类型,但它的默认实例不是null(比如有默认构造函数初始化了金额为0),那单纯判断!= null也没意义,因为即使没赋值,它也会是一个带有默认值的实例。
这时候需要检查它的内部核心字段,比如假设Money类有一个Decimal类型的Value属性,你可以这么写:
// 先判断实例不为null,再判断金额不是默认的0值 if (EntityObject.Amount != null && EntityObject.Amount.Value != 0) { Entity.Attributes.Add("budget amount", EntityObject.Amount); }
情况3:使用框架自带的Money类型
如果你用的是某些框架(比如ORM、财务类库)提供的Money类型,这类类型通常会自带空值/空状态的判断方法,比如IsEmpty(),直接调用即可:
if (!EntityObject.Amount.IsEmpty()) { Entity.Attributes.Add("budget amount", EntityObject.Amount); }
总结一下:先确认你的Money类型的本质,再选择对应的检查方式,就能解决空值判断不生效的问题啦~
内容的提问来源于stack exchange,提问作者kiran girase
相关产品推荐
相关产品推荐

