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

The*_*dge 1 c#

要检查对象是否为null,您可以执行以下任一操作:

var myObject = DoSomeCallThatMayReturnNull();
var myString = string.Empty;
Run Code Online (Sandbox Code Playgroud)

.

if (myObject == null)
  myString = "null";
Run Code Online (Sandbox Code Playgroud)

- 要么 -

if (Object.ReferenceEquals(null, myObject)) 
   myString = "null";
Run Code Online (Sandbox Code Playgroud)

在某些情况下使用null coallescing运算符??.然而,我想要添加一个IsNull的扩展方法,以便我可以执行以下操作:

if (myObject.IsNull())
Run Code Online (Sandbox Code Playgroud)

对于像int这样的可空类型?也能做到:

if (myInt.IsNull())
Run Code Online (Sandbox Code Playgroud)

我天真的实施是:

public static bool IsNull(this Object aObject)
{
    return aObject == null;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Tho*_*que 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,除了可空值类型之外,它不能在值类型(永远不为null)上调用.

但是我不相信该方法的用处......只需与null进行比较就是可读的.

  • @PasiSavolainen你确定吗?内联是由JIT完成的,我认为它不关心该方法是否属于不同的程序集. (2认同)