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属性赋值?

谢谢。

C# Setter does not assign

这是因为你在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;
}