c# - 在内部(在同一程序集中)将项目添加到 ReadOnlyCollection<T> 的最佳方法?

标签 c# collections design-patterns

我有以下类(class):

public class Foo
{
     public List<Bar> Bars {get; internal set;}
}

现在我想制作Bars一个ReadOnlyCollection这样 Bars 的内容不能公开更改:

public class Foo
{
     public ReadOnlyCollection<Bar> Bars {get; internal set;}
}

现在,如果我在同一个程序集中有一个类需要将项目添加到 Bars ,最好的方法是什么?

这就是我现在的做法:

public class FooHelper
{
   public FooHelper()
   {
      Foo foo = new Foo();
      //Code to modify the collection
      List<Bar> bars = foo.Bars.ToList<Bar>();
      bars.Add(new Bar("BAR BAR BAR"));
      foo.Bars = bars.AsReadOnly();
   }
}

我意识到如果我有一个 Private List<Bar> 会更容易在Foo像这样:

public class Foo
{
     private List<Bar> _bars;
     public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}         
}

...但是使用这种方法,我将如何向 _bars 添加一个项目? ?

我应该将其设为内部,设为内部属性,还是添加新的内部 AddBar()方法?

最佳答案

我个人会去添加一个内部 AddBar 方法,如下所示:

public class Foo
{
     private List<Bar> _bars;

     public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}         

     internal void AddBar(Bar bar)
     {
          _bars.Add(bar);
     }
}

其他程序集将看到只读集合,使其不可变。同一程序集中的代码将只能添加 Bar 项目,为您提供“防御性”API。

关于c# - 在内部(在同一程序集中)将项目添加到 ReadOnlyCollection<T> 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027855/

相关文章:

java - Swing - 在我的程序中组织 JFrames(或 JDialogs???)

c# - 从 SharePoint 读取文件时为 "Object reference not set to an instance of an object on server. The object is associated with property File"

c# - BlockingCollection 和 CancellationToken 传递

c# - c# for kinect的鼠标点击事件

c# - yyyyMMddtt 中的 DateTime.ParseExact 错误

python - 如何在双端队列中打印项目(python)

scala - 优雅的表达方式 xs.sort.head

java - 通过传递键列表从 HashMap 中删除键 - Java API 方法或实用程序?

java - 尽量减少类中的代码重复?

java - 在 Java 中处理动态数据库连接