在 C# 11 之前,结构中的每个字段都必须显式分配?无法重现

问题描述 投票:0回答:1

根据《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

c#
1个回答
0
投票

您正在调用无参数构造函数,它将所有字段分配为其默认值。

如果您将代码更改为:

Point point;
Console.WriteLine(point.X); // Error

...然后你就会看到错误。

请注意,如果您完全初始化它 - 无需调用

new
- 那就没问题:

Point point;
point.X = 10;
point.Y = 20;
Console.WriteLine(point.X); // Fine
© www.soinside.com 2019 - 2024. All rights reserved.