在模型中循环以检查属性是否为空

本文关键字:属性 是否 检查 模型 循环 | 更新日期: 2023-09-27 18:21:16

我在MVC应用程序中有一个模型Auto,它具有等属性

public string Id { get; set; }
public bool IsOOS{ get; set; }
public string Make { get; set; }
public string Model { get; set; }
[XmlElement(IsNullable = true)]
public DateTime? RegisteredDate { get; set; }

还有一个班有这个。。。

var a = new Auto(){
Id = someIDcomingfromServer,
IsOOS = someOOScomingFromServer,
... 
}

我想做的是…循环这些属性,看看是否有任何属性现在为空。

我如何循环查看这些属性(Id、IsOOS等)是否包含null?

感谢

在模型中循环以检查属性是否为空

好吧,可以使用反射来获取所有属性的集合,并检查每个属性是否为null,但为什么不直接显式呢?

if (Id == null || Make == null || Model == null || RegisteredDate == null)

它更短,更容易理解,没有反射的性能开销,也不需要那么多维护。没有一个"魔术"函数可以告诉你类的任何属性是否为null。

我会注意不要以牺牲系统性能为代价来缩短开发时间。花在开发上的一点额外时间(即使很乏味)可以对系统性能产生巨大的影响。

也就是说,一个Linq查询将是:

bool hasNull = 
    a.GetType()
     .GetProperties()
     .Any(prop => prop.GetValue(a, null) == null);

您可以为此使用反射。从实例中获取所有PropertyInfos并检查它们的值。类似这样的东西:

foreach (PropertyInfo pinfo in obj.GetType().GetProperties())
{
    object value = pinfo .GetValue(obj, null);
}

小心,反思是一个昂贵的过程。

您可以对其进行序列化并在字符串中搜索/>,因为序列化程序将null输出为,将empty输出为。这可能会捕获一些空对象以及空对象。如果只需要null,则需要将它们设置为可为null,并在属性中查找xsi:nil="true"。

*我发布这个解决方案是因为你想要另一个选择。其他人的建议是建议的方法。