2016-10-10 45 views
-1

所以我有這個類的公共財產:如何在懶惰實現添加到現有的公共財產(C#)

public static class DataStore 
{ 
    public static readonly List<Item> Items; 
    static DataStore 
    { 
     Items = new List<Item> 
     { 
      new Item {Name = "A"}, 
      new Item {Name = "B"}, 
      new Item {Name = "C"}, 
      ...//many more 
     }; 
    } 
} 

爲了節省內存,我加入一個List<Lazy<Item>>到DataStore:

List<Lazy<Item>> LazyItems = new List<Lazy<Item>> 
{ 
    new Lazy<Item>(() => new Item {Name="A"}), 
    new Lazy<Item>(() => new Item {Name="B"}), 


}; 

但是List<Item>是一個公共財產,並在很多地方被引用。我怎樣才能保留現有的List<Item>並使用新的財產?

+1

此更改會增加內存佔用量,而不會降低內存佔用量。 – Servy

+1

您有沒有費心分析過這個問題,以確定您的原始示例中的內存消耗是否是瓶頸? –

+0

這裏沒有足夠的上下文來幫助你。從字面上看,唯一有效的答案是「你不能那樣做」。在你的問題中也沒有足夠的信息來知道你想要做什麼甚至是有用的。但假設它是在你的真實世界的場景中,你必須至少將'Items Items'更改爲'IList Items',這樣你就可以提供一個定製的'IList '實現來了解'LazyItems '對象,並可以從那裏檢索元素。考慮同樣使用'IReadOnlyList ',因爲大概修改這兩個列表是沒有意義的。 –

回答

1

你不行。 A List<Item>需要具有已創建項目的完全物化列表,因此,您需要創建一個項目。您不能創建一些但不是全部的物品,但仍將其視爲List<Item>