我有一個需要存儲在集合中的結構。該結構具有返回字典的屬性。從另一個集合中訪問結構集合屬性
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