为什么这个小程序会给出 "Common Language Runtime detected an invalid program"?

Why does this tiny program give "Common Language Runtime detected an invalid program"?

我有一个非常小的 .NET 6 程序:

using System.Numerics;

var transform = new Transform2(default);

public readonly record struct Transform2(Vector2 Position, float Rotation)
{
    public Transform2(Vector2 position) : this()
    {
        Position = position;
    }
}

当我 运行 它时,我得到一个异常:

 System.InvalidProgramException: Common Language Runtime detected an invalid program.
   at Transform2..ctor(Vector2 position)

Reproducible dotnetfiddle

为什么会这样?它是 C# 编译器中的错误吗?

使用 SharpLab 进行调查,您会发现构造函数中的 this = default(Transform2); 很奇怪,并且似乎是 Matthew Watson 在评论中提到的错误。无论如何,我看不出有任何理由不将构造函数更改为 public Transform2(Vector2 position) : this(position, default),这似乎不会导致此问题。

根据 Sohaiub Jundi 的回答,我使用 SharpLab 进行了更多挖掘(该站点很棒!),结果发现最新的 Roslyn 构建将此标记为编译器错误:

error CS8982: A constructor declared in a 'record struct' with parameter list must have a 'this' initializer that calls the primary constructor or an explicitly declared constructor.

显然这是当前最新 .NET 6 版本中的错误,将在即将发布的版本中修复。

目前的解决方法是显式调用带有所有参数的完整构造函数:

using System.Numerics;

var transform = new Transform2(default);

public readonly record struct Transform2(Vector2 Position, float Rotation)
{
    public Transform2(Vector2 position) : this(position, default)
    {
        Position = position;
    }
}