C#Setter没有分配

时间:2013-07-06 23:37:02

标签: c# getter-setter

我正在编写一个由其他人编写的代码,并因为我认为与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属性赋值?

感谢。

2 个答案:

答案 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;
}