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;
}
}
没关系。我认为“基础”或“这个”指向不同的案例或其他。
谁能告诉我为什么以及发生了什么?什么是理论? 感谢。
答案 0 :(得分:1)
您通常得到的错误是64位应用程序尝试加载32位程序集的结果,反之亦然。
但是,我实际上可以在未安装.NET 4.5的计算机上重现该问题。
生成的匿名类IL似乎真的无效,因为ILSpy甚至无法对其进行反编译。