列表项不会更新

时间:2017-06-30 20:27:43

标签: c# winforms

好吧,我有一个简单的类列表,可能会在运行时更新,问题是当我设置一个属性时它不会在列表中更新。

代码:

class Foo
{
    public List<Link> Link => new List<Link>();

    public Foo()
    {
        //... Code that adds items to the list.
        var addr = Link.Find(_ => _.Valid).Use().Address;
        //here if i break and look at the Link list it must contain an item with Valid = false, yet it doesn't
    }
}

public class Link
{
    public Uri Address { get; set; }
    public bool Valid = true;

    public Link Use()
    {
        Valid = false;
        return  this;
    }
}

我知道它必须更新,因为我在列表中使用了该项目的引用,但由于某些未知原因它没有。

1 个答案:

答案 0 :(得分:2)

每次获得Link属性的值时,都会创建并返回新的列表实例。您应该只初始化属性一次,并在获取属性值时返回列表的同一实例:

public List<Link> Link { get; } = new List<Link>();

为什么你的代码不起作用?想想当你以这种方式添加两个项目并执行搜索时会发生什么:

Link.Add(new Link());
Link.Add(new Link());
Link.Find(...)
  1. 您正在调用Link属性的getter,它会创建列表的新实例并返回该空实例。
  2. 您正在将第一个Link对象添加到您在步骤1中收到的列表实例。
  3. 您再次调用Link属性的getter,它会创建列表的新实例(是的,另一个实例)并返回该新实例(空列表)。
  4. 您正在将第二个Link对象添加到步骤#3中的新空列表返回。
  5. 您正在调用Link属性的getter,它会创建列表的第三个实例(同样为空)并返回该实例。
  6. 您正在调用步骤#5中返回的空列表的Find方法。