如何检查空物体?

时间:2018-07-13 08:06:57

标签: c# object reflection is-empty

我有很多东西。其中一些具有字符串属性,而另一些具有布尔属性。我正在以多步骤形式使用它们。所以每个步骤都绑定到每个对象。

现在,如果用户填写前两个部分并保存数据,因为用户以后想填写其余数据。在这一点上,我需要确定要填充多少数据以及剩余多少。这样,下次下次加载表单时,基于先前填充的数据,我可以确定从哪里开始填充表单。

在保存时我试图确定有多少对象具有值。换句话说,如果我找到一个具有所有值的对象,例如空字符串,我可以跳过该对象以将其保存到数据库中。我提到了这个https://stackoverflow.com/a/22683141/10037521,它显示了如何检查具有所有字符串属性的空对象。

如何在此检查中包括布尔属性?例如如果该对象具有10个bool属性,并且所有属性都为false,则需要将该对象标识为空。

因此要总结上述问题,如何识别具有bool或string属性的对象是否为空白?

2 个答案:

答案 0 :(得分:2)

从技术上讲,您可以将 Reflection Linq 组合成这样:

  Object obj = ...

  // All Empty (false or null) public properties of either string or bool type
  PropertyInfo[] emptyProps = obj
    .GetType()
    .GetProperties(BindingFlags.Instance | BindingFlags.Public)
    .Where(prop => prop.CanRead) // you may want to check prop.CanWrite as well
    .Where(prop => prop.PropertyType == typeof(bool) || 
                   prop.PropertyType == typeof(string))
    .Where(prop => object.Equals(prop.GetValue(obj), 
                                 prop.PropertyType.IsValueType 
                                   ? Activator.CreateInstance(prop.PropertyType) 
                                   : null))
    .ToArray();

但是,如果您应该这样做,我会怀疑:某些属性不应被保存:

   // Should be saved
   public string FirstName {...} 
   // Should be saved
   public string SecondName {...} 
   // Should NOT be saved
   public string Name {get {return $"{FirstName} {SecondName}";}}

您可以具有详细标准,该标准应保存哪​​些数据,例如对于FirstName,您可能要检查(至少!)

   // FirstName must be not null, not empty and not blank
   bool shouldSave = !string.IsNullOrWhiteSpace(FirstName);

这就是为什么我建议在类中实现自定义属性 /方法的原因:

   public class MyClass {
     ...
     // virtual: you may want to add some properties in a derived class 
     public virtual bool IsEmpty {
       get {
         return string.IsNullOrWhiteSpace(FirstName) &&
                string.IsNullOrWhiteSpace(SecondName) &&
                ...
       }
     } 
   }

答案 1 :(得分:0)

您可以通过简单的支票进行检查

obj == null || obj == String.Empty

这将同时检查null和空条件

谢谢