我正在编写一个由其他人编写的代码,并因为我认为与setter方法有关的问题而陷入困境。下面的代码尝试将一个true值赋给一个公共元素,该公共元素的访问权限由setter元素控制。
while (true)
{
currentN = currentN.Pass(d);
if (currentN.NID == aimedID)
{
currentN.IsValid = true;
break;
}
}
当我调试代码时,即使在它进入if条件的情况下,我也很难看到,它没有将值true赋给currentNode.IsValid变量。它保持原样(假)。
getter / setter方法如下:
public bool IsValid
{
get { return Branches == null || Branches.Length == 0; }
set {}
}
正如我上面所说,我认为这与setter方法有关。如果我没有为set部分写任何东西,我就不能为IsValid变量赋值。如果我写set {this.IsValid = value},它最终会出现stackoverflow错误。为IsLeaf分配值不应该这么难。我想我错过了一点,虽然我查了一些关于getter / setter方法的教程。
我应该如何更改setter方法,以便为IsValid属性赋值?
感谢。
答案 0 :(得分:1)
这是因为你在setter中没有做任何事情,如果你做IsValid = true
那么你就是将事物分配给自己,这自然就是圆圈。您应该删除setter,因为getter依赖于外围设备信息,而不是一个独立的值。
要使条件成立,Branches
需要有一些项目。
答案 1 :(得分:0)
通常,您不希望为IsValid
属性设置值,因为它意味着要读取而不是设置。只需省略set {}
访问者,您就不需要它:
public bool IsValid
{
get { return Branches == null || Branches.Length == 0; }
}
您还可以将验证逻辑封装在方法中:
public bool IsValid()
{
return Branches == null || Branches.Length == 0;
}