提问者:小点点

IReadOnlyList的"对立面"只允许可以修改/可写的集合?


我正在寻找一个接口,它只允许我存储像List这样的可写集合,但如果我试图给它一个像数组这样的不可写集合,它就不能编译。

我尝试了两种I收集

ICollection<Foo> foo = new Foo[0]; // Compiles happily
IList<Bar> bar = new Bar[0]; // Compiles happily

foo.Add(null); // Throws
bar.Add(null); // Throws

// Is there an interface that would only allow write-able collections?

我知道我可以在调用Add之前检查IsReadOnly,但这太糟糕了。我运气不好吗?我试图在网上搜索,但没有找到任何相关内容。

编辑:从我收集的情况来看,最糟糕的选择似乎是直接使用List?但我的意图是不强制实现类型为具体类,除非我必须这样做:/


共2个答案

匿名用户

我认为在这个例子中,您可以通过指定自己的接口来处理这个问题,例如。

IWriteableCollection<T> : ICollection<T> {
      void Add(T item);
}

我知道这涉及到一个自定义类型,需要围绕它进行一定量的编码,但确实给了您编译时的安全性。

实现可能类似于:

WriteableFooCollection : IWriteableColection<Foo>, List<Foo> {
   ...
}

匿名用户

有几个选项可供选择

  1. 只需使用一个普通的List