这是我要编写的结构:
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; } }
这将导致以下编译错误:
在将其所有字段分配给之前,不能使用“此”对象 在将控制权返回给调用方之前,必须完全分配字段“ AttackTraits.probability” 在将控制权返回给调用者之前,必须完全分配自动实现的属性“ AttackTraits.Damage”的备用字段。考虑从构造函数初始化程序调用默认构造函数。 在将控制权返回给调用者之前,必须完全分配自动实现的属性“ AttackTraits.Distance”的备用字段。考虑从构造函数初始化程序调用默认构造函数。
在将其所有字段分配给之前,不能使用“此”对象
在将控制权返回给调用方之前,必须完全分配字段“ AttackTraits.probability”
在将控制权返回给调用者之前,必须完全分配自动实现的属性“ AttackTraits.Damage”的备用字段。考虑从构造函数初始化程序调用默认构造函数。
在将控制权返回给调用者之前,必须完全分配自动实现的属性“ AttackTraits.Distance”的备用字段。考虑从构造函数初始化程序调用默认构造函数。
我究竟做错了什么?
您是probability通过Probability属性设置字段的,但是编译器不知道该属性是否设置了字段…因此您需要显式初始化概率字段本身
probability
Probability
public AttackTraits(double probability, int damage, float distance) { this.probability = 0; Distance = distance; Damage = damage; }