编辑
- 这个问题不是:什么是 NullReferenceException?当访问 null 引用的成员时,会发生 NullReferenceException。
- 这个问题是:没有成员访问时怎么会出现NullReferenceException?
结束编辑
据我所知,NullReferenceException
仅在访问引用类型的成员时才会发生。据我所知,“引用”this
和 base
永远不能为空。
今天,我遇到一个抛出 NullReferenceException
的属性,而没有成员访问权限(this
和 base
的成员除外) )。
我的问题是:如何!
这是代码:
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/