struct的构造函数问题(编译器大喊我没有完全初始化所有struct的自动属性)

dev*_*ium 1 .net c# automatic-properties

我有以下一点代码:

public struct Interval
{
    public double Min { get; set; }
    public double Max { get; set; }

    public Interval(double min = double.MinValue, double max = double.MaxValue)
    {
        Min = min;
        Max = max;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说

在将控制权返回给调用者之前,必须完全分配自动实现的属性的备份字段.考虑从构造函数初始化程序中调用默认构造函数.

这是我不理解的,因为我的构造函数正在完全初始化此结构的值.不是吗?

Jon*_*eet 7

您的构造函数正在尝试设置属性 - 在知道所有字段都已初始化之前,它无法执行.(在明确分配所有结构的字段之前,您无法调用任何实例方法或访问任何属性.)当您使用自动实现的属性时,它会显示一个怪癖:您拥有除了通过以外无法访问的字段属性,但在为字段赋值之前不能使用该属性!修复很简单 - 只需添加对无参数构造函数的调用:

public Interval(double min = double.MinValue, double max = double.MaxValue)
    : this()
{
    Min = min;
    Max = max;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为无参数构造函数会将默认值分配给所有字段,之后您可以毫无问题地使用这些属性.

但是,我建议首先不要使用可变结构.