C# Setter does not assign
本文关键字:assign not does Setter | 更新日期: 2023-09-27 18:21:14
我正在处理一个由其他人编写的代码,但由于一个问题而被卡住,我认为这个问题与setter方法有关。下面的代码试图为访问由setter元素控制的公共元素分配一个true值。
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方法有关。如果不为集合部分编写任何内容,则无法为IsValid变量赋值。如果我写集{this.IsValid=value},它最终会出现stackerflow错误。为IsLeaf赋值不应该这么难。我想我遗漏了一点,尽管我查看了一些关于getter/setter方法的教程。
我应该如何更改setter方法,以便为IsValid属性赋值?
谢谢。
这是因为你在setter中什么都不做,如果你做IsValid = true
,那么你就把这个东西分配给它自己,它自然会循环。您应该删除setter,因为getter依赖于外围信息,而不是一个独立的值。
为了使条件为真,Branches
需要有一些项。
通常,您不想为IsValid
属性设置值,因为它是用来读取的,而不是用来设置的。只需省略set {}
访问器,您不需要它:
public bool IsValid
{
get { return Branches == null || Branches.Length == 0; }
}
您还可以将验证逻辑封装在一个方法中:
public bool IsValid()
{
return Branches == null || Branches.Length == 0;
}