lambda func异常,那可能是.Net Framework的错误?

时间:2013-09-17 09:46:22

标签: c# lambda

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)

如果make“var result = base.TestBase(ev);” chanage to“var result = this.TestBase(ev);” 这很正常。 如果不使用lambda 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;
    }
}

没关系。我认为“基础”或“这个”指向不同的案例或其他。

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

1 个答案:

答案 0 :(得分:1)

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

但是,我实际上可以在未安装.NET 4.5的计算机上重现该问题。

生成的匿名类IL似乎真的无效,因为ILSpy甚至无法对其进行反编译。