检查实例是否为null的扩展方法

时间:2014-01-15 00:13:41

标签: c#

要检查对象是否为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;
}

我错过了什么吗?

2 个答案:

答案 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));
}