该方法是否使用空值调用,或者是否给出空引用异常?
MyObject myObject = null;
myObject.MyExtensionMethod(); // <-- is this a null reference exception?
如果是这种情况,我将永远不需要检查我的“this”参数是否为空?
这会很好地工作(也不例外)。扩展方法不使用虚拟调用(即它使用“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);
}
etc
从根本上讲,对静态调用的调用非常字面意义 - 即
string s = ...
if(s.IsNullOrEmpty()) {...}
becomes:
string s = ...
if(YourExtensionClass.IsNullOrEmpty(s)) {...}
显然没有空检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)