我设计,做我的某些对象的延迟加载一个辅助方法,调用它看起来像这样:什么是'不可验证的代码',为什么它不好?
public override EDC2_ORM.Customer Customer {
get { return LazyLoader.Get<EDC2_ORM.Customer>(
CustomerId, _customerDao,()=>base.Customer, (x)=>Customer = x); }
set { base.Customer = value; }
}
当我编译这个代码,我得到以下警告:
警告5通过来自 的匿名方法,lambda表达式, 查询表达式或迭代器结果 中的'base'关键字以不可验证的代码访问成员 'EDC2_ORM.Billing.Contract.Site' 。考虑将 访问转换为 包含类型的帮助方法。
这里的抱怨究竟是什么,为什么我做得不好?
假设我猜对了,它并没有真正做出任何时髦的指针魔术 - 但它使用了一个非虚拟调用给虚拟成员,我怀疑你只能从派生类型中做(可验证的) 。 – 2009-01-01 20:02:33
很酷。在这个问题上学到了三件新东西 – 2009-01-01 20:06:55
@Jon,这是正确的。这是一个...... CLR在2.0中添加的一个有趣的限制 – JaredPar 2009-01-01 20:07:19