2016-10-10 44 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>