我正在尝试通过解析 XML 模板来执行在运行时动态创建的方法。在编译之前,我立即从表达式 lambda 的“DebugView”中得到以下信息:
.Lambda #Lambda1<Reporting.Core.Formatter+WriterDriver>(
Reporting.Core.IReportWriter $writer,
System.Object $data) {
.Block(
Reporting.Core.IReportWriter $writer,
System.Object $data) {
.Call System.Diagnostics.Trace.WriteLine("Initialize Driver");
.Call System.Diagnostics.Trace.WriteLine($writer);
.Block(Reporting.Core.IBannerWriter $bannerWriter) {
$bannerWriter = .Call $writer.WriteBanner();
.Call System.Diagnostics.Trace.WriteLine($bannerWriter);
.Call $bannerWriter.WithLeftEntry(
"Key1",
"Value1");
.Call $bannerWriter.WithLeftEntry(
"Key 2",
"Value 2");
.Call $bannerWriter.WithRightEntry(
"Another Key",
"Another Value");
.Call $bannerWriter.EndBanner()
}
}
}
并这样称呼它,确保myReportWriter
并且myData
不是null
先于:
Action<IReportWriter, Object> Formatter = methodExpression.Compile();
Formatter(myReportWriter, myData)
在我的跟踪输出中,在抛出空引用异常之前,我什至没有得到“初始化驱动程序”输出。
仔细观察调试输出显示它实际上是,进入“初始化驱动程序”并在第一个 .Block 内的 $writer 上添加另一个针对 null 的调试检查表明(writer == null) == true
. 现在,问题是:为什么 $writer 在被传递到方法调用时为空?