Dex*_* CD 6 c# generics struct language-lawyer
以下代码编译时没有警告或错误,但会导致TypeLoadException异常:
public struct GuidFor<T>
{
}
public struct Person
{
public GuidFor<Person> Id;
}
class Program
{
static void Main()
{
Person p;
}
}
Run Code Online (Sandbox Code Playgroud)
当Person是一个结构并且具有一个通用结构的字段并Person用作其类型参数时,就会出现问题。
为什么这种模式会导致运行时错误?如果不允许这样做,我希望它是编译时错误而不是运行时错误。C++ 中的等效代码运行良好并且通常很有用。
我在 Windows 10、.NET Core 3.0.100 上运行此代码。
这是 CLR 设计的问题。为了加载 struct PersonCLR 需要加载它的所有成员。因此,当 CLR 尝试加载时,GuidFor<Person> Id它需要先加载Person。我们有一个循环。
CLR 理解这一点并抛出异常。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |