我有一个需要存储在集合中的结构。该结构有一个返回字典的属性。
public struct Item
{
private IDictionary<string, string> values;
public IDictionary<string, string> Values
{
get
{
return this.values ?? (this.values = new Dictionary<string, string>());
}
}
}
public class ItemCollection : Collection<Item> {}
在测试时,我发现如果我将项目添加到集合中然后尝试访问字典,则 structs values 属性永远不会更新。
var collection = new ItemCollection { new Item() }; // pre-loaded with an item
collection[0].Values.Add("myKey", "myValue");
Trace.WriteLine(collection[0].Values["myKey"]); // KeyNotFoundException here
但是,如果我先加载该项目,然后将其添加到集合中,则会保留值字段。
var collection = new ItemCollection();
var item = new Item();
item.Values.Add("myKey", "myValue");
collection.Add(item);
Trace.WriteLine(collection[0].Values["myKey"]); // ok
我已经确定结构是这种类型的错误选项,并且在使用类时不会出现问题,但我很好奇这两种方法之间有什么不同。谁能解释发生了什么?