C# 4.0 使用';基数';委托中的关键字导致System.BadImageFormatException
我有一个奇怪的问题,我想如果有人能告诉我为什么会发生这种情况。我在基本抽象类中有一个受保护的方法,如下所示:C# 4.0 使用';基数';委托中的关键字导致System.BadImageFormatException,c#-4.0,C# 4.0,我有一个奇怪的问题,我想如果有人能告诉我为什么会发生这种情况。我在基本抽象类中有一个受保护的方法,如下所示: protected T ForExistingEntity<T>(TEntity entity, object key, Func<Entity, T> action) { entity = GetByKey(key); if (entity != null) return action(entity); return d
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 Update(e);
}
);
执行此代码时,在以下行引发异常:
return action(entity);
在基抽象类中。例外情况是:
System.BadImageFormatException:试图加载格式不正确的程序。(HRESULT的异常:0x8007000B)
现在,当我修改我的呼叫时,如下所示:
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 Update(e);
}
);
它运行正常,没有任何问题
编辑:
Update方法位于基本抽象类中,如下所示:
public virtual bool Update(TEntity entity) {
Condition.Requires(entity, "entity")
.IsNotNull();
if (ValidateEntity(entity))
return Update(entity, true);
return false;
}
我开始认为这是因为更新是虚拟的,调用实际上起源于基类本身?不管怎么说,这个异常并没有什么帮助。这似乎是一个涉及从泛型类中的匿名方法调用基虚拟方法的问题。如果您希望解决此问题,请毫不犹豫地在connect上升级此错误。幸运的是,这里的解决方法非常简单。我也遇到了同样的问题。我安装了.NET4.5框架。当我卸载该软件并替换为.NET 4.0 framework时,这个问题消失了(例如,当我查看VS2010信息的右上角时,4.0.30319)我遇到了相同的错误。MS仍然没有解决这个问题,但是可以通过创建一个方法来包装基本方法调用来解决这个问题。