我有一个奇怪的问题,我想如果有人可以告诉我为什么会发生这种情况。我在基本抽象类中有一个受保护的方法,如下所示:
protected T ForExistingEntity<T>(TEntity entity, object key, Func<Entity, T> action) {
entity = GetByKey(key);
if (entity != null)
return action(entity);
return default(T);
}
我从继承课程的原始电话如下:
return base.ForExistingEntity(
new MyEntity(), key, e => {
e.someFiled = 5;
return base.Update(e);
}
);
执行此代码时,会在以下行中引发异常:
return action(entity);
在基础抽象类中。例外是:
System.BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)
现在我修改我的电话如下:
return base.ForExistingEntity(
new MyEntity(), key, e => {
e.someFiled = 5;
return Update(e);
}
);
它正常运行而没有任何问题。
修改
Update方法位于基本抽象类中,如下所示:
public virtual bool Update(TEntity entity) {
Condition.Requires(entity, "entity")
.IsNotNull();
if (ValidateEntity(entity))
return Update(entity, true);
return false;
}
我开始认为这是因为Update是虚拟的并且调用实际上源自基类本身?无论如何,例外情况不是很有用。
答案 0 :(得分:8)
这似乎是一个known C# compiler bug,涉及从泛型类中的匿名方法调用基本虚方法。如果你想解决它,请不要犹豫,在连接上提出这个错误。幸运的是,解决方法非常简单。
答案 1 :(得分:0)
我有同样的问题。我安装了.NET 4.5框架。当我卸载它并替换为.NET 4.0框架时,这个问题就消失了(即当我查看VS2010信息的右上角时是4.0.30319)