gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:28:16 25 4
gpt4 key购买 nike

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

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

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

最佳答案

那会很好(无一异常(exception))。扩展方法不使用虚拟调用(即它使用“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# - 在 C# 中,当您在空对象上调用扩展方法时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/847209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com