这个问题在这里已经有了答案:
Self referencing generic member in struct
(1 个回答)
去年关闭。
以下代码编译时没有警告或错误,但会导致 TypeLoadException
异常(exception):
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 上运行此代码。
最佳答案
这是设计上的 CLR 问题。为了加载结构Person
CLR 需要加载它的所有成员。因此,当 CLR 尝试加载 GuidFor<Person> Id
时它需要加载 Person
第一的。我们有一个循环。
CLR 理解这一点并抛出异常。
关于c# - 为什么具有带有类型参数 P 的泛型结构字段的结构 P 会导致 TypeLoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59965631/