我正在寻找一个接口,它只允许我存储像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
?但我的意图是不强制实现类型为具体类,除非我必须这样做:/
我认为在这个例子中,您可以通过指定自己的接口来处理这个问题,例如。
IWriteableCollection<T> : ICollection<T> {
void Add(T item);
}
我知道这涉及到一个自定义类型,需要围绕它进行一定量的编码,但确实给了您编译时的安全性。
实现可能类似于:
WriteableFooCollection : IWriteableColection<Foo>, List<Foo> {
...
}
有几个选项可供选择
List