C# Can';我找不到为什么我有空引用异常
下面是代码和有问题的行 当我将鼠标悬停在C# Can';我找不到为什么我有空引用异常,c#,.net,exception,nullreferenceexception,C#,.net,Exception,Nullreferenceexception,下面是代码和有问题的行 当我将鼠标悬停在src.EnergyServiceLevel上时,它显示为空。 如果我在前一行中检查null,那怎么可能呢 我的猜测是可能有线程导致了问题,所以我添加了一个锁, 但这没用 public static ServiceLevelsGroup SafeClone(this ServiceLevelsGroup src) { ServiceLevelsGroup res = null; lock (_locker) { if (src != nul
src.EnergyServiceLevel
上时,它显示为空。
如果我在前一行中检查null,那怎么可能呢
我的猜测是可能有线程导致了问题,所以我添加了一个锁,
但这没用
public static ServiceLevelsGroup SafeClone(this ServiceLevelsGroup src) {
ServiceLevelsGroup res = null;
lock (_locker) {
if (src != null) {
res = new ServiceLevelsGroup();
if (src.EnergyServiceLevel != null) {
res.EnergyServiceLevel = new ServiceLevelInfo { ServiceGrade = src.EnergyServiceLevel.ServiceGrade };
if (src.EnergyServiceLevel.Reason != null)
res.EnergyServiceLevel.Reason = src.EnergyServiceLevel.Reason;
}
}
}
return res;
}
异常发生在上述代码中的res.EnergyServiceLevel=…
行
以下是调试模式下发生的异常的屏幕截图:
可能您的NULL位于
res.EnergyServiceLevel
您的代码显示了锁(\u locker)
——因此看起来您处于多线程环境中。你能检查一下你的变量是否为空吗?i、 e.其他所有调用的锁(\u locker)
是否正确?src.EnergyServiceLevel.ServiceGrade
可能为空
将鼠标指针移动到每个引用将准确显示哪个为空。能否将代码复制到帖子中,而不是发布图像?文本太小,无法阅读。请同时发布异常详细信息。由于这是一个扩展方法,我猜想,
ServiceLevelsGroup
/ServiceLevelInfo
不在您的控件中的类可能重复?在这种情况下,异常可能来自ServiceLevelInfo
构造函数中-如果打开“查看详细信息…”链接,并深入到相应的InnerException
s中,会发生什么情况?@hammar:您可以直接查看图像以获得全尺寸视图。+1锁定仅在您也锁定setter时才有用。虽然,由于OP正在定义一个扩展方法,他/她可能无法访问原始代码。我认为您最接近真实情况,一旦我再次访问worl,我将检查可能我没有正确锁定代码的其他部分。谢谢-如果这不是锁定问题,请使用“查看详细信息”并查看异常的调用堆栈-它可能位于属性求值的某个位置。这不会导致NullReferenceException这不会导致NullReferenceException分配null
值是完全合法的