gpt4 book ai didi

c# - 没有成员访问时怎么会出现 NullReferenceException?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:45 25 4
gpt4 key购买 nike

编辑

  • 这个问题不是:什么是 NullReferenceException?当访问成员的空引用时,会发生 NullReferenceException。
  • 这个问题是:当没有成员访问时,怎么会出现 NullReferenceException?

结束编辑

据我所知,NullReferenceException 只有在访问引用类型的成员时才会发生。据我所知,“引用”thisbase 永远不能为 null。

今天我遇到了一个抛出 NullReferenceException 的属性,同时没有成员访问权限(thisbase 的成员除外) ).

我的问题是:怎么做!

这是代码:

public class ComponentObject : Base
{
private readonly XmlNamespaceManager _nsmgr;
public XmlNode FieldGroupContainerWerknemers { get { ... } }

public string NumberOfMngDirectorMainShareholders
{
get
{
XmlNode fieldGroupContainerWerknemers = this.FieldGroupContainerWerknemers;
return base.GetValue(fieldGroupContainerWerknemers, this._nsmgr, "./ns1:FieldGroup//ns1:DynamicFields//ns1:Field[@Name='DgaAantal']//ns1:Value");
}
}
}

这是个异常(exception):

Exception type: NullReferenceException
Source: Turien.Interfaces.BizTalk.Policy.Helpers
Target Site: System.String get_NumberOfMngDirectorMainShareholders()
The following is a stack trace that identifies the location where the exception occured

at Turien.Interfaces.BizTalk.Policy.Helpers.BatchCertigo.ComponentObject.get_NumberOfMngDirectorMainShareholders()
at Turien.Interfaces.BizTalk.Policy.Helpers.BatchTurien.BatchE.BatchE.CreateCurrentCoverageData()
at Turien.Interfaces.BizTalk.Policy.Helpers.BatchTurien.BatchE.BatchE.CreateLetterDataBatchE()
at Turien.Interfaces.BizTalk.Policy.Helpers.BatchTurien.BatchE.BatchE.CreateContract()
at Turien.Interfaces.BizTalk.Policy.Helpers.BatchTurien.BatchE.BatchE.CreateBatch(XmlDocument outputdata)
at Turien.Interfaces.BizTalk.Policy.Helpers.BatchTurien.BatchBase`1.CreateBatch(XmlDocument outputdata, String fileName, Int32 outputNumber)

我采取的步骤:

  • 我搜索了另一个属性 NumberOfMngDirectorMainShareholders:这是唯一的一个。
  • 我使用 ILSpy 来监视 DLL 内部。生产中的代码与源代码管理中的相同。

编辑

对于那些告诉我要进行调试的人:我很乐意。提出将我的断点放在哪里以及要检查哪些变量的建议。还有更多:如何处理这些信息。例如:如果 this.FieldGroupContainerWerknemers 为 null,那将如何导致这种情况。或者,如果 _nsmgr 为 null,它会如何导致此问题(请记住:堆栈跟踪指向此方法/属性!)

最佳答案

JIT 编译器可以在发布版本中内联方法调用(启用优化)。

在您的示例中,get_FieldGroupContainerWerknemers()base.GetValue 可能已被内联。在这种情况下,这些方法中的 NullReferenceException 将使堆栈跟踪指向 get_NumberOfMngDirectorMainShareholders()

内联发生在 JIT 编译期间,因此您不会在 IL 代码中看到它。

关于c# - 没有成员访问时怎么会出现 NullReferenceException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783816/

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