修改
结束编辑
据我所知,只有在访问引用类型的成员时才会出现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 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
:这是唯一的属性。修改
对于那些告诉要调试的人:我很乐意。想出一个建议,在哪里放置我的断点和哪些变量来检查。还有更多:如何处理这些信息。例如:如果this.FieldGroupContainerWerknemers
为null,那将导致这种情况。或者如果_nsmgr
为null,它将如何导致此问题(请记住:stacktrace指向THIS方法/属性!)
答案 0 :(得分:2)
JIT编译器可以在发布版本中内联方法调用(启用优化)。
在您的示例中,get_FieldGroupContainerWerknemers()
或base.GetValue
可能已内联。在这种情况下,这些方法中的NullReferenceException会使堆栈跟踪指向get_NumberOfMngDirectorMainShareholders()
。
在JIT编译期间发生内联,因此您不会在IL代码中看到它。