C# 非常简单的代码编译,但在执行时抛出TypeLoadException
以下代码在VS2013和VS2015中编译,适用于从2.0到4.6.1的各种.NET Framework版本,但执行时抛出System.TypeLoadException:C# 非常简单的代码编译,但在执行时抛出TypeLoadException,c#,.net,generics,clr,C#,.net,Generics,Clr,以下代码在VS2013和VS2015中编译,适用于从2.0到4.6.1的各种.NET Framework版本,但执行时抛出System.TypeLoadException: namespace Test { struct Foo<T> { } struct Bar<U> { Foo<Bar<U>> foo; } class Program { sta
namespace Test
{
struct Foo<T>
{
}
struct Bar<U>
{
Foo<Bar<U>> foo;
}
class Program
{
static void Main(string[] args)
{
var x = new Bar<int>();
}
}
}
名称空间测试
{
结构Foo
{
}
结构条
{
富富,;
}
班级计划
{
静态void Main(字符串[]参数)
{
var x=新条();
}
}
}
但是,如果Foo或Bar从结构更改为类,它将运行。我试图理解为什么这对两个结构不起作用。为什么这个代码会失败
例外消息是:
“System.TypeLoadException发生消息:在mscorlib.dll中发生了类型为”“System.TypeLoadException”“的首次意外异常附加信息:无法从程序集”“scratch,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”“加载类型为”“Test.Bar`1”“。”
不能使用循环类型创建结构 类似问题:
struct Foo
{
Bar bar;
}
struct Bar
{
Foo foo;
}
或
类使用引用,工作正常
泛型逻辑也有同样的问题,但只在运行时产生类型错误(IL编译)
您的structfoo
建议在Foo结构内部使用T-Type,但这会在结构布局中产生一个循环
如果您真的使用T-Type,它还会产生一个编译器错误:
struct Foo<T>
{
T demo; // CS0523
}
struct Bar<U>
{
Foo<Bar<U>> foo; // CS0523
}
structfoo
{
T demo;//CS0523
}
结构条
{
Foo-Foo;//CS0523
}
TypeLoadException的消息可能重复?异常消息为:“System.TypeLoadException发生消息:mscorlib.dll中发生了类型为”“System.TypeLoadException”“的首次意外异常其他信息:无法从程序集”“scratch,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”“加载类型为”“Test.Bar`1”“。”。“可能与……有关?当我改变Foo-Foo时,我得到了CS0523代码>至条形图代码>CS0523很好的解释是(这或多或少是重复的,但不准确)
struct Foo<T>
{
T demo; // CS0523
}
struct Bar<U>
{
Foo<Bar<U>> foo; // CS0523
}