我有一个需要存储在集合中的结构。该结构具有返回字典的属性。从另一个集合中访问结构集合属性
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> {}
当测试时我发现如果我将项目添加到集合,然后尝试访问字典,结构值属性永远不会更新。
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
我已经决定,一个结构是这种类型的错误的选项,并使用一个类时,不会出现问题,但我很好奇什么是两种方法之间的不同。任何人都可以解释发生了什么?
msdn doc:这是一个msdn示例http://msdn.microsoft.com/en-us/library/vstudio/8b0bdca4.aspx – Cybermaxs