IsNull()扩展用于检查任何对象的空值

时间:2014-02-03 05:30:00

标签: c# .net null extension-methods

我正在添加新的extension方法,以便根据以下条件检查任何对象的null值:

  1. 如果true的值为class object
  2. ,则应返回null
  3. 如果对象属于true类型并且值为null or Empty
  4. ,则应返回string
  5. 如果对象属于true类型且Min value,则应返回DateTime
  6. null的任何其他条件都需要检查。(如果需要,请提出建议。)
  7. 这是IsNull()扩展方法:

     public static bool IsNull(this object obj)
     {
         if (obj == null || obj == DBNull.Value)
            return true;
    
         if (obj.GetType() == typeof(string))
            return string.IsNullOrEmpty(obj.ToString());
    
         if (obj.GetType() == typeof(DateTime))
         {
            DateTime _dateValue = DateTime.MinValue;
    
            if (DateTime.TryParse(obj.ToString(), out _dateValue) && _dateValue == DateTime.MinValue)
            return true;
         }
    
         return false;
     }
    

    现在我的问题是:

    1. 我是否需要为Value和Reference类型添加不同的检查 对象
    2. 此扩展方法是否处理所有类型的null检查 对象
    3. 任何建议或改进都需要添加扩展名吗?

2 个答案:

答案 0 :(得分:3)

一些观察结果:

1)值类型永远不会是null。在值类型上调用时,它将被装箱为object ..并且不会是null(除非您将其包装在Nullable<T>中)。

2)您的方法不再检查null ..它还会检查最小值和空字符串。空字符串不是null - 它是一个空值。最小值不是null ..它是一个值。它在这里负有太多责任,应该重新命名。

3)鉴于我上面所说的......你可以简单地做到这一点,而不是编写自己的函数:

if (variable == default(variable.GetType()))

因为它检查所有类型的默认值..值类型,例如DateTimeintnull的类。然后,您唯一的其他特定检查是DBNull.Value

答案 1 :(得分:3)

  

我是否需要为Value和Reference类型对象添加checky?

值类型不能为空。

  

这个externtion方法是否处理任何对象的所有类型的空检查?

看起来像(值类型除外)

  

任何建议或改进都需要加入延伸?

正如我所说的值类型不能是null,所以你可以添加一个额外的条件来检查类型是否是值类型,如果是,你可以返回false

if(obj.GetType().IsValueType) return false;

顺便说一句,如果你在DateTime检查之前写这个,你的DateTime条件将无法访问。无论如何它都没有意义,但它是你的选择。如果你想返回true时价值等于DateTime.MinValue,这完全取决于你。