我正在添加新的extension方法,以便根据以下条件检查任何对象的null
值:
true
的值为class object
null
true
类型并且值为null
or Empty
string
true
类型且Min value
,则应返回DateTime
。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
检查
对象答案 0 :(得分:3)
一些观察结果:
1)值类型永远不会是null
。在值类型上调用时,它将被装箱为object
..并且不会是null
(除非您将其包装在Nullable<T>
中)。
2)您的方法不再检查null
..它还会检查最小值和空字符串。空字符串不是null
- 它是一个空值。最小值不是null
..它是一个值。它在这里负有太多责任,应该重新命名。
3)鉴于我上面所说的......你可以简单地做到这一点,而不是编写自己的函数:
if (variable == default(variable.GetType()))
因为它检查所有类型的默认值..值类型,例如DateTime
,int
和null
的类。然后,您唯一的其他特定检查是DBNull.Value
。
答案 1 :(得分:3)
我是否需要为Value和Reference类型对象添加checky?
值类型不能为空。
这个externtion方法是否处理任何对象的所有类型的空检查?
看起来像(值类型除外)
任何建议或改进都需要加入延伸?
正如我所说的值类型不能是null
,所以你可以添加一个额外的条件来检查类型是否是值类型,如果是,你可以返回false
if(obj.GetType().IsValueType) return false;
顺便说一句,如果你在DateTime
检查之前写这个,你的DateTime条件将无法访问。无论如何它都没有意义,但它是你的选择。如果你想返回true
时价值等于DateTime.MinValue
,这完全取决于你。