在C#中,当您对空对象调用扩展方法时会发生什么?

该方法使用空值调用还是给出空引用异常?

MyObject myObject = null;

myObject.MyExtensionMethod(); // <-- is this a null reference exception?

如果是这种情况,我将永远不需要检查我的’this’参数是否为null?

回答:

这样就可以正常工作(也不例外)。扩展方法不使用虚拟调用(即,它使用“ call” il指令,而不是“

callvirt”),因此除非您在扩展方法中自己编写,否则不存在空检查。实际上,在某些情况下这很有用:

public static bool IsNullOrEmpty(this string value)

{

return string.IsNullOrEmpty(value);

}

public static void ThrowIfNull<T>(this T obj, string parameterName)

where T : class

{

if(obj == null) throw new ArgumentNullException(parameterName);

}

等等

从根本上讲,对静态调用的调用非常直观-即

string s = ...

if(s.IsNullOrEmpty()) {...}

变成:

string s = ...

if(YourExtensionClass.IsNullOrEmpty(s)) {...}

显然没有空检查的地方。

以上是 在C#中,当您对空对象调用扩展方法时会发生什么? 的全部内容, 来源链接: utcz.com/qa/404605.html

回到顶部