嗯,可以在C#中定义通用结构,也可以将此通用结构用作另一个结构的字段。我知道。但是如果泛型字段使用父结构的名称作为泛型类型,那么事情会变得混乱,我不知道为什么。
首先,我通过更改项目的设计重写了我的代码,实际上我发现在第二个结构中我并不需要父类型。但是,“为什么”的问题仍在我的脑海中,我想看看这里是否有人可以提供解释。
以下是重现此问题的代码:
internal struct Boo<T>
{
public int IntValue;
}
internal struct Foo
{
public Boo<Foo> IntContainer;
public short ShortValue;
}
var fooVariable = new Foo();
运行此命令会导致出现以下错误消息,甚至在创建Foo
的新实例(或该程序的任何其他行)的行之前。所以似乎CLR在定义Foo
类型时遇到问题,即使编译器对它很好。
发生了'System.TypeLoadException'类型的未处理异常&gt;在mscorlib.dll中 附加信息:无法从程序集中加载“Foo”类型 'XXXXXX,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'。
我之前遇到过CLR无法确定其大小的结构时出现此错误的经验。但是,这不是这种情况,因为Boo
和Foo
的大小都是已知且易于计算的。实际上,泛型类型对结构的大小和定义没有影响,因此情况并非如此。 除非CLR不检查此内容。
我的另一个想法是CLR无法找到定义类型的方法,因为设计看起来像一个循环。但是,如果我将任何或两个结构定义更改为类,则代码可以正常工作。所以这必须是结构特别的东西。