在内部(在同一程序集内)将项添加到 ReadOnlyCollection 的最佳方法

本文关键字:ReadOnlyCollection 方法 最佳 添加 程序集 在内部 | 更新日期: 2023-09-27 17:56:44

我有以下类:

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();
   }
}

我意识到,如果我在Foo中拥有这样的私人List<Bar>会更容易:

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

。但是使用这种方法,我将如何将项目添加到_bars

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

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

就个人而言,我会添加一个内部 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。

相关文章:
  • 没有找到相关文章