gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:37 25 4
gpt4 key购买 nike

我有以下代码:

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;
}
}

编译器提示

Backing field for automatically implemented property must be fully assigned before control is returned to the caller. Consider calling the default constructor from a constructor initializer.

这是我不明白的地方,因为我的构造函数正在完全初始化这个结构的值。不是吗?

最佳答案

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

public Interval(double min = double.MinValue, double max = double.MaxValue)
: this()
{
Min = min;
Max = max;
}

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

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

关于c# - 结构的构造函数有问题(编译器大喊我没有完全初始化结构的所有自动属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3954401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com