结构构造函数:“在控制权返回给调用者之前,必须完全分配字段。”

2023-11-23

这是我正在尝试编写的结构:

  public struct AttackTraits
        {
            public AttackTraits(double probability, int damage, float distance)
            {
                Probability = probability;
                Distance = distance;
                Damage = damage;
            }

            private double probability;
            public double Probability
            {
                get
                {
                    return probability;
                }
                set
                {
                    if (value > 1 || value < 0)
                    {
                        throw new ArgumentOutOfRangeException("Probability values must be in the range [0, 1]");
                    }
                    probability = value;
                }
            }

            public int Damage { get; set; }

            public float Distance { get; set; }
        }

这会导致以下编译错误:

无法使用“this”对象 在其所有字段都被分配之前 到

字段“AttackTraits.probability”必须 在控制之前被完全分配 返回给调用者

自动支持字段 已实施的财产 “AttackTraits.Damage”必须完全 在控制权返回之前分配 呼叫者,召集者。考虑致电 来自构造函数的默认构造函数 初始化程序。

自动支持字段 已实施的财产 “AttackTraits.Distance”必须完全 在控制权返回之前分配 呼叫者,召集者。考虑致电 来自构造函数的默认构造函数 初始化程序。

我究竟做错了什么?


如果您在具有自动属性的结构上看到此错误,只需从参数化构造函数中调用无参数构造函数即可: this()下面的例子:

struct MyStruct
{
  public int SomeProp { get; set; }

  public MyStruct(int someVal) : this()
  {
     this.SomeProp = someVal;
  }
}

通过从构造函数声明中调用 :this(),您可以让 ValueType 基类初始化自动属性的所有支持字段。我们无法在构造函数上手动执行此操作,因为我们无权访问自动属性的支持字段。 ValueType 是所有结构的基类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构构造函数:“在控制权返回给调用者之前,必须完全分配字段。” 的相关文章

随机推荐