gpt4 book ai didi

c#-4.0 - 在委托(delegate)中使用 'base' 关键字会导致 System.BadImageFormatException

转载 作者:行者123 更新时间:2023-12-02 19:20:17 25 4
gpt4 key购买 nike

我有一个奇怪的问题,我希望有人能启发我为什么会发生这种情况。我在基本抽象类中有一个 protected 方法,如下所示:

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);

在抽象基类中。异常(exception)是:

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 是虚拟的并且调用实际上源自基类本身?无论如何,异常并不是很有帮助。

最佳答案

这似乎是 known C# compiler bug涉及从泛型类中的匿名方法调用基虚拟方法。如果您希望解决此错误,请毫不犹豫地在连接上投票。幸运的是,这里的解决方法非常简单。

关于c#-4.0 - 在委托(delegate)中使用 'base' 关键字会导致 System.BadImageFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com