在委托中使用“base”关键字会导致 System.BadImageFormatException

2024-01-10

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

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

它运行正常,没有任何问题。

Edit:

Update 方法位于抽象基类中,如下所示:

public virtual bool Update(TEntity entity) {
    Condition.Requires(entity, "entity")
        .IsNotNull();

    if (ValidateEntity(entity))
        return Update(entity, true);

    return false;
}

我开始认为发生这种情况是因为 Update 是虚拟的并且调用实际上源自基类本身?无论如何,例外并不是很有帮助。


这似乎是一个已知的 C# 编译器错误 https://connect.microsoft.com/VisualStudio/feedback/details/626550/badimageformatexception-on-simple-program-using-generics-and-lambdas涉及从泛型类中的匿名方法调用基虚拟方法。如果您希望解决此错误,请毫不犹豫地在连接上投票。幸运的是,这里的解决方法非常简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在委托中使用“base”关键字会导致 System.BadImageFormatException 的相关文章

随机推荐