以下代码编译时没有警告或错误,但会导致TypeLoadException
异常:
public struct GuidFor<T>
{
}
public struct Person
{
public GuidFor<Person> Id;
}
class Program
{
static void Main()
{
Person p;
}
}
当Person
是一个结构并且具有一个字段是通用结构并使用Person
作为其类型参数时,就会发生问题。
为什么此模式会导致运行时错误?如果不允许这样做,我希望它是编译时错误而不是运行时错误。 C ++中的等效代码可以正常工作,并且通常很有用。
我正在Windows 10,.NET Core 3.0.100上运行此代码。
答案 0 :(得分:0)
这是设计上的CLR问题。为了加载结构Person
,CLR需要加载其所有成员。因此,当CLR尝试加载GuidFor<Person> Id
时,它需要首先加载Person
。而且我们有一个周期。
CLR理解了这一点并引发异常。