另一个结构中的通用结构域

时间:2017-02-18 16:49:29

标签: c# .net generics structure

嗯,可以在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无法确定其大小的结构时出现此错误的经验。但是,这不是这种情况,因为BooFoo的大小都是已知且易于计算的。实际上,泛型类型对结构的大小和定义没有影响,因此情况并非如此。 除非CLR不检查此内容。

我的另一个想法是CLR无法找到定义类型的方法,因为设计看起来像一个循环。但是,如果我将任何或两个结构定义更改为类,则代码可以正常工作。所以这必须是结构特别的东西。

0 个答案:

没有答案