要检查对象是否为null,您可以执行以下任一操作:
var myObject = DoSomeCallThatMayReturnNull();
var myString = string.Empty;
if (myObject == null)
myString = "null";
- 或 -
if (Object.ReferenceEquals(null, myObject))
myString = "null";
并且在某些情况下使用null coallescing运算符??。我想要做的是添加一个IsNull的扩展方法,以便我可以执行以下操作:
if (myObject.IsNull())
和可空类型如int?也能做到:
if (myInt.IsNull())
我天真的实施是:
public static bool IsNull(this Object aObject)
{
return aObject == null;
}
我错过了什么吗?
答案 0 :(得分:12)
我会像这样实现它:
static class Extensions
{
public static bool IsNull<T>(this T obj) where T : class
{
return obj == null;
}
public static bool IsNull<T>(this T? obj) where T : struct
{
return !obj.HasValue;
}
}
这样,除了可以为空的值类型之外,它不能在值类型(永远不为null)上调用。
然而,我不相信该方法的用处......只需与null进行比较就是可读的。
答案 1 :(得分:0)
您的实施可行。此外,如果您想要类似值的类型,您可以这样做:
public static bool IsNullOrDefault<T>(this object source) where T : struct
{
return source == null || source.Equals(default (T));
}