我正在添加新的扩展方法,用于根据以下条件检查任何对象的null
值:
- 如果
class object
的值null
,则应返回true
- 如果对象类型为
string
且值为null
或Empty
,则应返回true
- 如果对象类型为
DateTime
并且具有Min value
,则应返回true
。 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;
}
现在我的问题是:
- 我是否需要为值和引用类型添加不同的检查 对象?
- 此扩展方法是否处理所有类型的
null
检查任何 对象? - 任何建议或改进需要添加扩展?
我需要为值和引用类型对象添加检查差异吗?
值类型不能为空。
此 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()))
因为这会检查所有类型的默认值..值类型,如DateTime
,int
和null
类。然后,您唯一的其他特定检查是针对DBNull.Value
.