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



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

  1. 如果class object的值null,则应返回true
  2. 如果对象类型为string且值为nullEmpty,则应返回true
  3. 如果对象类型为DateTime并且具有Min value,则应返回true
  4. null需要检查的任何其他条件。(如果需要,请建议。

这是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. 我是否需要为值和引用类型添加不同的检查 对象?
  2. 此扩展方法是否处理所有类型的null检查任何 对象?
  3. 任何建议或改进需要添加扩展?

我需要为值和引用类型对象添加检查差异吗?

值类型不能为空。

此 externation 方法是否处理任何对象的所有类型的 null 检查?

它看起来像(值类型除外)

任何建议或改进需要添加扩展?

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

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

顺便说一下,如果您在DateTime检查之前编写此内容,则无法访问日期时间条件。反正没有意义,但这是你的选择。如果要在值等于DateTime.MinValue时返回true,则完全取决于您。

一些观察:

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

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

3)鉴于我上面所说的..您可以简单地执行此操作,而不是编写自己的函数:

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

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

相关内容

  • 没有找到相关文章

最新更新