好吧,我有一个简单的类列表,可能会在运行时更新,问题是当我设置一个属性时它不会在列表中更新。
代码:
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;
}
}
我知道它必须更新,因为我在列表中使用了该项目的引用,但由于某些未知原因它没有。
答案 0 :(得分:2)
每次获得Link
属性的值时,都会创建并返回新的列表实例。您应该只初始化属性一次,并在获取属性值时返回列表的同一实例:
public List<Link> Link { get; } = new List<Link>();
为什么你的代码不起作用?想想当你以这种方式添加两个项目并执行搜索时会发生什么:
Link.Add(new Link());
Link.Add(new Link());
Link.Find(...)
Link
属性的getter,它会创建列表的新实例并返回该空实例。Link
对象添加到您在步骤1中收到的列表实例。Link
属性的getter,它会创建列表的新实例(是的,另一个实例)并返回该新实例(空列表)。Link
对象添加到步骤#3中的新空列表返回。Link
属性的getter,它会创建列表的第三个实例(同样为空)并返回该实例。Find
方法。