2
class Program
{
    static void Main(string[] args)
    {
        var t = new TestImpl();
        Console.WriteLine(t.Test(TestEnum.Value));
    }
}

public class AbstractTest<T> where T:new()
{
    public virtual T TestBase(TestEnum v)
    {
        return new T();
    }
}

public class Product
{
    public int Id { get; set; }
}

public enum TestEnum
{
     Value
}
public class TestImpl : AbstractTest<Product>
{
    public int Test(TestEnum ev)
    {
        Func<int> f = () =>
        {
            var result = base.TestBase(ev);
            return result.Id;
        };
        return f();
    }
}

大家好:

我有类似代码的问题(在.net4.0 上运行)。

它将抛出异常:尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)

if make " var result = base.TestBase(ev);" 更改为“ var result = this.TestBase(ev);” 这将是正常的。如果不使用 lambda func ,请像这样使用 common func:

 public class TestImpl : AbstractTest<Product>
{
    public int Test(TestEnum ev)
    {
        Func<int> f = () =>
        {
            //var result = base.TestBase(ev);
           // return result.Id;
            return TestResult(ev);
        };
        return f();
    }

    private int TestResult(TestEnum ev)
    {
        var result = base.TestBase(ev);
        return result.Id;
    }
}

那没问题。我认为是“基础”或“这个”指向不同的案例或其他。

谁能告诉我为什么以及发生了什么?理论是什么?谢谢。

4

1 回答 1

1

您通常得到的错误是 64 位应用程序尝试加载 32 位程序集的结果,反之亦然。

但是,我实际上可以在没有安装 .NET 4.5 的机器上重现该问题。

匿名类生成的IL好像真的是无效的,因为ILSpy甚至反编译都失败了。

于 2013-09-17T09:53:03.967 回答