【问题标题】:How to check an empty object?如何检查空对象?
【发布时间】:2018-12-21 13:28:32
【问题描述】:

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

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

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

如何在此检查中也包含布尔属性?例如如果该对象有 10 个 bool 属性并且全部为 false,我需要将该对象标识为空。

所以总结一下上面的问题,如何判断对象是否为空且具有布尔或字符串属性?

【问题讨论】:

  • 但是“false”也是一个有效值吗? bool? 会更好吗?
  • 为什么不直接存储用户所在的“步骤”?
  • @john :我认为这是一个非常好的建议,以便我们可以将真/假都处理为非空。同意。我愿意做出这种改变。谢谢。
  • @Sweeper :由于应用程序的结构,我不能。我必须使用数据来识别它。
  • 使用可为空的变量。 Null 表示空白。你也可以有可以为空的布尔值

标签: c# object reflection is-empty


【解决方案1】:

你可以通过简单的检查来检查它:

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

这将检查null 和“空”条件。

【讨论】:

  • 对于字符串,只需使用String.IsNullOrEmpty(your_string)
【解决方案2】:

从技术上讲,您可以将 ReflectionLinq 组合成这样的东西:

  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) &&
                ...
       }
     } 
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多