循环遍历模型以检查null属性

时间:2014-09-08 16:11:43

标签: c# asp.net .net

我在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?

由于

3 个答案:

答案 0 :(得分:5)

可以 使用反射来获取所有属性的集合并检查每个属性是否为空,但为什么不明确?

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

它更短,更容易理解,没有反射的性能开销,并且不需要 进行大量维护。没有“魔法”函数会告诉您类的任何属性是否为null。

我会小心不要以牺牲系统性能为代价来缩短开发时间。在开发中花费一点额外的时间(即使它很繁琐)会对系统性能产生巨大影响。

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

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

答案 1 :(得分:3)

您可以使用反射。从您的实例获取所有PropertyInfos并检查其值。 像这样:

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

注意,反思是一个昂贵的过程。

答案 2 :(得分:1)

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

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