-7

我正在处理由其他人编写的代码,并且由于我认为与 setter 方法有关的问题而卡住了。下面的代码尝试为一个公共元素分配一个真值,该公共元素的访问由一个 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 属性赋值?

谢谢。

4

2 回答 2

1

这是因为您在 setter 中绝对没有做任何事情,如果您这样做了,IsValid = true那么您就是将这个东西分配给它自己,这自然会循环往复。您应该删除 setter,因为 getter 依赖于外围信息并且不是独立值。

要使条件为真,Branches需要有一些项目。

于 2013-07-06T23:40:37.573 回答
0

通常,您不想为IsValid属性设置值,因为它是用来读取的,而不是设置的。只需省略set {}访问器,您就不需要它:

public bool IsValid 
{
    get { return Branches == null || Branches.Length == 0; }
}

您还可以将验证逻辑封装在一个方法中:

public bool IsValid()
{
    return Branches == null || Branches.Length == 0;
}
于 2013-07-06T23:40:03.470 回答