根据《C#12 in a Nutshell》一书:
在 C# 11 之前,结构中的每个字段都必须显式分配 在构造函数(或字段初始值设定项)中。该限制现已 已经放松了。
但是这个:
using System;
Point point = new Point();
Console.WriteLine(point.X);
struct Point
{
public int X;
public int Y;
}
使用 .NET 5 编译时编译并运行(返回 0)(如果我理解正确的话,这是 C#9?来源:https://dotnet.microsoft.com/en-us/download/dotnet/5.0)。 MRE:https://dotnetfiddle.net/K6cu5z。
您正在调用无参数构造函数,它将所有字段分配为其默认值。
如果您将代码更改为:
Point point;
Console.WriteLine(point.X); // Error
...然后你就会看到错误。
请注意,如果您完全初始化它 - 无需调用
new
- 那就没问题:
Point point;
point.X = 10;
point.Y = 20;
Console.WriteLine(point.X); // Fine