C# NullReferenceException与MSIL

C# NullReferenceException与MSIL,c#,windows-phone,.net-assembly,cil,C#,Windows Phone,.net Assembly,Cil,我正在解释一个C#Windows Phone应用程序的异常报告。方法抛出NullReferenceException。方法是: public void OnDelete(object o, EventArgs a) { if (MessageBox.Show(Res.IDS_AREYOUSURE, Res.IDS_APPTITLE, MessageBoxButton.OKCancel) == MessageBoxResult.OK) m_Field.RequestDele

我正在解释一个C#Windows Phone应用程序的异常报告。方法抛出
NullReferenceException
。方法是:

public void OnDelete(object o, EventArgs a)
{
    if (MessageBox.Show(Res.IDS_AREYOUSURE, Res.IDS_APPTITLE, MessageBoxButton.OKCancel) == MessageBoxResult.OK)
        m_Field.RequestDelete();
}
这与
m_Field
为空是一致的-没有任何其他东西可能为空。但这里有一个神秘的部分

异常对象的
StackTrace
StackFrame
中的
GetILOffset()
返回0x13。如ILDASM所示,该方法的MSIL如下:

IL_0000:  call       string App.Res::get_IDS_AREYOUSURE()
IL_0005:  call       string App.Res::get_IDS_APPTITLE()
IL_000a:  ldc.i4.1
IL_000b:  call       valuetype (...) System.Windows.MessageBox::Show(...)
IL_0010:  ldc.i4.1
IL_0011:  bne.un.s   IL_001e
IL_0013:  ldarg.0
IL_0014:  ldfld      class App.Class2 App.Class1::m_Field
IL_0019:  callvirt   instance void App.Class2::RequestDelete()
IL_001e:  ret
这是我不明白的。如果偏移量确实为0x13,则表示
ldarg
行导致异常。但该命令被记录为不引发任何异常。应该抛出的是
callvirt
,不是吗?或者是相对于方法开始以外的其他对象的偏移量
ldfld
也可以抛出,但仅当
this
对象为空时;这在非洲是不可能的

文档提到调试信息可能会妨碍偏移量,但这是一个发布版本

我正在使用ILDASM检查的DLL正是我作为XAP的一部分发送到Windows Phone应用商店的DLL