为什么这个小程序会给出 "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)
为什么会这样?它是 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;
}
}
我有一个非常小的 .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)
为什么会这样?它是 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;
}
}