我有一個非常小的 .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)
可重現的 dotnetfiddle
為什么會這樣?它是 C# 編譯器中的錯誤嗎?
uj5u.com熱心網友回復:
使用SharpLab對此進行研究,您會this = default(Transform2);在建構式中發現這很奇怪,并且似乎是Matthew Watson評論中提到的錯誤。無論如何,我看不出有任何理由不更改public Transform2(Vector2 position) : this(position, default)似乎不會導致此問題的建構式。
uj5u.com熱心網友回復:
根據 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;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426262.html
上一篇:Appconfigerror配置系統初始化失敗如何解決
下一篇:為什么這個PHP例外沒有被捕獲?
