.NET Core C#中如何检查模型所有字段是否为Null
在.NET Core C#中检查模型所有字段是否均为Null的方法
针对你给出的模型(未来可能新增字段),下面提供几种实用的检查方案:
一、反射法(通用适配扩展)
这是最省心的方案,不管后续加多少字段,都不用修改检查逻辑,自动遍历所有属性判断是否为null。
代码示例:
public static bool AreAllPropertiesNull<T>(T obj) where T : class { if (obj == null) return true; foreach (var property in typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)) { if (property.GetValue(obj) != null) return false; } return true; } // 调用示例 var myModel = new model(); bool allPropertiesNull = AreAllPropertiesNull(myModel);
说明:该方法会遍历类的所有公共实例属性,只要有一个属性值不为null就返回false,全部为null则返回true。你的模型里都是可空值类型和引用类型(string本身是引用类型),完全适配这个逻辑;如果未来新增非可空值类型字段,只需调整逻辑区分可空类型即可。
二、源代码生成法(高性能适配扩展)
如果在意反射的性能开销,可以用.NET源代码生成器,在编译时自动生成硬编码的检查逻辑,后续新增字段会自动更新检查代码,兼顾性能和扩展性。
生成后的等效代码大概是这样(无需手动编写,由生成器自动生成):
public static bool AreAllPropertiesNull(model obj) { if (obj == null) return true; return obj.Duration == null && obj.TimeZoneOffset == null && obj.RolloverTime == null && obj.IncludeCurrent == null; }
这种方式性能和手动写检查完全一致,但不用每次加字段都手动修改代码,适合大型项目或性能敏感场景。
三、手动检查法(不推荐)
如果模型短期内不会变动,可以手动写检查逻辑,但后续新增字段必须同步修改这个方法,否则会漏检:
public bool AreAllFieldsNull() { return Duration == null && TimeZoneOffset == null && RolloverTime == null && IncludeCurrent == null; }
显然这种方式扩展性极差,不符合你未来加字段的需求,仅作为临时方案参考。
内容的提问来源于stack exchange,提问作者user3086751
相关产品推荐
相关产品推荐

